diff --git a/app/constants/db_enums.rb b/app/constants/db_enums.rb index 4cd0a82e7..ad898c37a 100644 --- a/app/constants/db_enums.rb +++ b/app/constants/db_enums.rb @@ -22,7 +22,7 @@ module DbEnums def self.builtype { "Purpose built" => 1, - "Conversion" => 2 + "Conversion" => 2, } end diff --git a/app/models/bulk_upload.rb b/app/models/bulk_upload.rb index 720cd5a36..6f6d1f066 100644 --- a/app/models/bulk_upload.rb +++ b/app/models/bulk_upload.rb @@ -159,7 +159,7 @@ class BulkUpload # property_reference: row[100], beds: row[101], unittype_gn: row[102], - property_building_type: row[103], + builtype: row[103], wchair: row[104], property_relet: row[105], rsnvac: row[106], diff --git a/app/models/case_log.rb b/app/models/case_log.rb index ae165cb75..9db96bdfd 100644 --- a/app/models/case_log.rb +++ b/app/models/case_log.rb @@ -112,9 +112,12 @@ class CaseLog < ApplicationRecord enum armedforces: DbEnums.armed_forces, _suffix: true enum first_time_property_let_as_social_housing: DbEnums.polar, _suffix: true enum unitletas: DbEnums.unitletas, _suffix: true + enum builtype: DbEnums.builtype, _suffix: true AUTOGENERATED_FIELDS = %w[id status created_at updated_at discarded_at].freeze - OPTIONAL_FIELDS = %w[do_you_know_the_postcode do_you_know_the_local_authority].freeze + OPTIONAL_FIELDS = %w[do_you_know_the_postcode + do_you_know_the_local_authority + first_time_property_let_as_social_housing].freeze def self.editable_fields attribute_names - AUTOGENERATED_FIELDS @@ -236,6 +239,14 @@ private dynamically_not_required << "incfreq" end + if sale_or_letting == "Letting" + dynamically_not_required << "sale_completion_date" + end + + if la.present? + dynamically_not_required << "why_dont_you_know_la" + end + if tenancy == "Secure (including flexible)" dynamically_not_required << "tenancylength" end diff --git a/app/models/form/question.rb b/app/models/form/question.rb index 2362441c8..c4fe5284b 100644 --- a/app/models/form/question.rb +++ b/app/models/form/question.rb @@ -33,12 +33,6 @@ class Form::Question !!readonly end - def conditional_on - @conditional_on ||= form.conditional_question_conditions.select do |condition| - condition[:to] == id - end - end - def enabled?(case_log) return true if conditional_on.blank? @@ -61,6 +55,12 @@ private answer.join(", ") end + def conditional_on + @conditional_on ||= form.conditional_question_conditions.select do |condition| + condition[:to] == id + end + end + def evaluate_condition(condition, case_log) case page.questions.find { |q| q.id == condition[:from] }.type when "numeric" diff --git a/db/migrate/20211124174732_remove_old_fields.rb b/db/migrate/20211124174732_remove_old_fields.rb new file mode 100644 index 000000000..81922f48b --- /dev/null +++ b/db/migrate/20211124174732_remove_old_fields.rb @@ -0,0 +1,9 @@ +class RemoveOldFields < ActiveRecord::Migration[6.1] + def up + remove_column :case_logs, :property_building_type + end + + def down + add_column :case_logs, :property_building_type, :string + end +end diff --git a/db/schema.rb b/db/schema.rb index 0c8b93e67..9a8314372 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2021_11_24_152204) do +ActiveRecord::Schema.define(version: 2021_11_24_174732) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -35,7 +35,6 @@ ActiveRecord::Schema.define(version: 2021_11_24_152204) do t.integer "ethnic" t.integer "national" t.integer "prevten" - t.string "armed_forces" t.integer "ecstat1" t.integer "hhmemb" t.string "relat2" @@ -70,7 +69,6 @@ ActiveRecord::Schema.define(version: 2021_11_24_152204) do t.integer "underoccupation_benefitcap" t.integer "leftreg" t.integer "reservist" - t.string "armed_forces_partner" t.integer "illness" t.integer "preg_occ" t.string "accessibility_requirements" @@ -84,7 +82,6 @@ ActiveRecord::Schema.define(version: 2021_11_24_152204) do t.string "previous_postcode" t.integer "rsnvac" t.integer "unittype_gn" - t.string "property_building_type" t.integer "beds" t.string "property_void_date" t.integer "offered" @@ -100,6 +97,7 @@ ActiveRecord::Schema.define(version: 2021_11_24_152204) do t.integer "tcharge" t.integer "layear" t.integer "lawaitlist" + t.string "property_postcode" t.integer "reasonpref" t.string "reasonable_preference_reason" t.integer "cbl" @@ -164,7 +162,6 @@ ActiveRecord::Schema.define(version: 2021_11_24_152204) do t.datetime "sale_completion_date" t.datetime "startdate" t.integer "armedforces" - t.string "property_postcode" t.integer "first_time_property_let_as_social_housing" t.string "why_dont_you_know_la" t.integer "unitletas" diff --git a/spec/controllers/admin/admin_users_controller_spec.rb b/spec/controllers/admin/admin_users_controller_spec.rb new file mode 100644 index 000000000..33722cff4 --- /dev/null +++ b/spec/controllers/admin/admin_users_controller_spec.rb @@ -0,0 +1,30 @@ +require "rails_helper" +require_relative "../../support/devise" + +describe Admin::AdminUsersController, type: :controller do + render_views + let(:page) { Capybara::Node::Simple.new(response.body) } + let(:resource_title) { "Admin Users" } + let(:valid_session) { {} } + login_admin_user + + describe "Get admin users" do + before do + get :index, session: valid_session + end + + it "returns a table of admin users" do + expect(page).to have_content(resource_title) + expect(page).to have_table("index_table_admin_users") + expect(page).to have_link(AdminUser.first.id.to_s) + end + end + + describe "Create admin users" do + let(:params) { { admin_user: { email: "test2@example.com", password: "pAssword1" } } } + + it "creates a new admin users" do + expect { post :create, session: valid_session, params: params }.to change(AdminUser, :count).by(1) + end + end +end diff --git a/spec/controllers/admin/case_logs_controller_spec.rb b/spec/controllers/admin/case_logs_controller_spec.rb new file mode 100644 index 000000000..1ffec1073 --- /dev/null +++ b/spec/controllers/admin/case_logs_controller_spec.rb @@ -0,0 +1,29 @@ +require "rails_helper" +require_relative "../../support/devise" + +describe Admin::CaseLogsController, type: :controller do + render_views + let(:page) { Capybara::Node::Simple.new(response.body) } + let(:resource_title) { "Case Logs" } + let(:valid_session) { {} } + login_admin_user + + describe "Get case logs" do + let!(:case_log) { FactoryBot.create(:case_log, :in_progress) } + before do + get :index, session: valid_session + end + + it "returns a table of case logs" do + expect(page).to have_content(resource_title) + expect(page).to have_table("index_table_case_logs") + expect(page).to have_link(case_log.id.to_s) + end + end + + describe "Create case logs" do + it "creates a new case log" do + expect { post :create, session: valid_session }.to change(CaseLog, :count).by(1) + end + end +end diff --git a/spec/controllers/admin/dashboard_controller_spec.rb b/spec/controllers/admin/dashboard_controller_spec.rb new file mode 100644 index 000000000..7568babb3 --- /dev/null +++ b/spec/controllers/admin/dashboard_controller_spec.rb @@ -0,0 +1,41 @@ +require "rails_helper" +require_relative "../../support/devise" + +describe Admin::DashboardController, type: :controller do + render_views + let(:page) { Capybara::Node::Simple.new(response.body) } + let(:resource_title) { "Dashboard" } + let!(:case_log) { FactoryBot.create(:case_log, :in_progress) } + let!(:case_log_2) { FactoryBot.create(:case_log, :in_progress) } + let!(:completed_case_log) { FactoryBot.create(:case_log, :completed) } + let(:valid_session) { {} } + login_admin_user + + describe "Get case logs" do + before do + get :index, session: valid_session + end + + it "returns a dashboard page" do + expect(page).to have_content(resource_title) + end + + it "returns a panel of recent case logs" do + expect(page).to have_xpath("//div[contains(@class, 'panel') and contains(//h3, 'Recent Case Logs')]") + end + + it "returns a panel of in progress case logs" do + panel_xpath = "//div[@class='panel' and .//h3[contains(., 'Total case logs in progress')]]" + panel_content_xpath = "#{panel_xpath}//div[@class='panel_contents' and .//p[contains(., 2)]]" + expect(page).to have_xpath(panel_xpath) + expect(page).to have_xpath(panel_content_xpath) + end + + it "returns a panel of completed case logs" do + panel_xpath = "//div[@class='panel' and .//h3[contains(., 'Total case logs completed')]]" + panel_content_xpath = "#{panel_xpath}//div[@class='panel_contents' and .//p[contains(., 1)]]" + expect(page).to have_xpath(panel_xpath) + expect(page).to have_xpath(panel_content_xpath) + end + end +end diff --git a/spec/factories/admin_user.rb b/spec/factories/admin_user.rb new file mode 100644 index 000000000..083e24450 --- /dev/null +++ b/spec/factories/admin_user.rb @@ -0,0 +1,8 @@ +FactoryBot.define do + factory :admin_user do + email { "admin@example.com" } + password { "pAssword1" } + created_at { Time.zone.now } + updated_at { Time.zone.now } + end +end diff --git a/spec/factories/case_log.rb b/spec/factories/case_log.rb index e7f0259cd..985d89073 100644 --- a/spec/factories/case_log.rb +++ b/spec/factories/case_log.rb @@ -56,7 +56,6 @@ FactoryBot.define do previous_postcode { "SE2 6RT" } rsnvac { "Tenant abandoned property" } unittype_gn { "House" } - property_building_type { "dummy" } beds { 3 } property_void_date { "03/11/2019" } offered { 2 } @@ -133,8 +132,10 @@ FactoryBot.define do mrcyear { 2020 } incref { 554_355 } sale_completion_date { nil } - startdate { nil } + startdate { Time.zone.now } armedforces { 1 } + builtype { 1 } + unitletas { 2 } end created_at { Time.zone.now } updated_at { Time.zone.now } diff --git a/spec/factories/user.rb b/spec/factories/user.rb index d6542b3c7..41a613b38 100644 --- a/spec/factories/user.rb +++ b/spec/factories/user.rb @@ -1,6 +1,5 @@ FactoryBot.define do factory :user do - sequence(:id) { |i| i } email { "test@example.com" } password { "pAssword1" } created_at { Time.zone.now } diff --git a/spec/models/case_log_spec.rb b/spec/models/case_log_spec.rb index 7002999b3..1c265f59a 100644 --- a/spec/models/case_log_spec.rb +++ b/spec/models/case_log_spec.rb @@ -330,6 +330,7 @@ RSpec.describe Form, type: :model do describe "status" do let!(:empty_case_log) { FactoryBot.create(:case_log) } let!(:in_progress_case_log) { FactoryBot.create(:case_log, :in_progress) } + let!(:completed_case_log) { FactoryBot.create(:case_log, :completed) } it "is set to not started for an empty case log" do expect(empty_case_log.not_started?).to be(true) @@ -337,11 +338,17 @@ RSpec.describe Form, type: :model do expect(empty_case_log.completed?).to be(false) end - it "is set to not started for an empty case log" do + it "is set to in progress for a started case log" do expect(in_progress_case_log.in_progress?).to be(true) expect(in_progress_case_log.not_started?).to be(false) expect(in_progress_case_log.completed?).to be(false) end + + it "is set to completed for a completed case log" do + expect(completed_case_log.in_progress?).to be(false) + expect(completed_case_log.not_started?).to be(false) + expect(completed_case_log.completed?).to be(true) + end end describe "weekly_net_income" do diff --git a/spec/support/controller_macros.rb b/spec/support/controller_macros.rb index 460bd50a6..5111be2b5 100644 --- a/spec/support/controller_macros.rb +++ b/spec/support/controller_macros.rb @@ -13,4 +13,12 @@ module ControllerMacros sign_in user end end + + def login_admin_user + before(:each) do + @request.env["devise.mapping"] = Devise.mappings[:admin_user] + admin_user = FactoryBot.create(:admin_user) + sign_in admin_user + end + end end