From 7f164c2da3becc364a70f9fe9df855f14deca68b Mon Sep 17 00:00:00 2001 From: Josh Puetz Date: Tue, 16 Mar 2021 08:33:25 -0500 Subject: [PATCH] Add test for DevicesController (#12985) * Add test for DevicesController * Remove defensive calls --- app/controllers/devices_controller.rb | 6 +-- spec/requests/devices_spec.rb | 66 +++++++++++++++++++++++++++ 2 files changed, 69 insertions(+), 3 deletions(-) create mode 100644 spec/requests/devices_spec.rb diff --git a/app/controllers/devices_controller.rb b/app/controllers/devices_controller.rb index 23d43231c..87d176602 100644 --- a/app/controllers/devices_controller.rb +++ b/app/controllers/devices_controller.rb @@ -18,14 +18,14 @@ class DevicesController < ApplicationController end def destroy - device = Device.find_by(device_params) + device = Device.find_by(id: params[:id]) unless device render json: { error: "Not Found", status: 404 }, status: :not_found return end - device&.destroy - if device&.destroyed? + device.destroy + if device.destroyed? head :no_content else render json: { error: device.errors_as_sentence }, status: :bad_request diff --git a/spec/requests/devices_spec.rb b/spec/requests/devices_spec.rb new file mode 100644 index 000000000..0680f96e4 --- /dev/null +++ b/spec/requests/devices_spec.rb @@ -0,0 +1,66 @@ +require "rails_helper" + +RSpec.describe "Devices", type: :request do + let(:user) { create(:user) } + + before do + allow(FeatureFlag).to receive(:enabled?).with(:mobile_notifications).and_return(true) + sign_in user + end + + describe "POST /users/devices" do + context "when device persisted" do + it "increases device count" do + post "/users/devices", params: { + token: "123", + platform: "Android", + app_bundle: "hello" + } + expect(user.devices.count).to eq(1) + end + end + + context "when device not persisted" do + let(:params) do + { + token: "123", + platform: "unknown", + app_bundle: "hello" + } + end + + it "does not increase device count" do + post "/users/devices", params: params + expect(user.devices.count).to eq(0) + end + + it "returns an error" do + post "/users/devices", params: params + expect(response.status).to eq(400) + expect(response.body).to include("error") + end + end + end + + describe "DELETE /users/devices/:id" do + let(:device) { create(:device, user: user) } + + context "when device not found" do + it "returns an error" do + delete "/users/devices/123" + expect(response.status).to eq(404) + expect(response.parsed_body["error"]).to eq("Not Found") + expect(response.parsed_body["status"]).to eq(404) + end + end + + context "when device deleted" do + it "deletes the device" do + delete "/users/devices/#{device.id}" + expect(user.devices.count).to eq(0) + expect(response.status).to eq(204) + expect(Device.find_by(id: device.id)).to be_nil + end + end + end +end