From bcd76ee6d5bd81e8b0c86ec3411dac32862aaa43 Mon Sep 17 00:00:00 2001 From: Du Peng Date: Tue, 20 Dec 2022 18:42:19 +0100 Subject: [PATCH] (bug) always show machine availability in calender if machine module is inactive --- .../public_availabilities_service.rb | 6 ++--- test/fixtures/history_values.yml | 9 +++++++ test/fixtures/settings.yml | 6 +++++ .../availabilities/as_admin_test.rb | 26 ++++++++++++++----- .../availabilities/as_public_test.rb | 26 +++++++++++++++---- 5 files changed, 59 insertions(+), 14 deletions(-) diff --git a/app/services/availabilities/public_availabilities_service.rb b/app/services/availabilities/public_availabilities_service.rb index 3edbec67e..731fde282 100644 --- a/app/services/availabilities/public_availabilities_service.rb +++ b/app/services/availabilities/public_availabilities_service.rb @@ -11,9 +11,9 @@ class Availabilities::PublicAvailabilitiesService level = in_same_day(window[:start], window[:end]) ? 'slot' : 'availability' service = Availabilities::AvailabilitiesService.new(@current_user, level) - machines_slots = service.machines(Machine.where(id: ids[:machines]), @current_user, window) - spaces_slots = service.spaces(Space.where(id:ids[:spaces]), @current_user, window) - trainings_slots = service.trainings(Training.where(id: ids[:trainings]), @current_user, window) + machines_slots = Setting.get('machines_module') ? service.machines(Machine.where(id: ids[:machines]), @current_user, window) : [] + spaces_slots = Setting.get('spaces_module') ? service.spaces(Space.where(id: ids[:spaces]), @current_user, window) : [] + trainings_slots = Setting.get('trainings_module') ? service.trainings(Training.where(id: ids[:trainings]), @current_user, window) : [] events_slots = events ? service.events(Event.all, @current_user, window) : [] [].concat(trainings_slots).concat(events_slots).concat(machines_slots).concat(spaces_slots) diff --git a/test/fixtures/history_values.yml b/test/fixtures/history_values.yml index b1913dafd..9ff6bfc8c 100644 --- a/test/fixtures/history_values.yml +++ b/test/fixtures/history_values.yml @@ -860,3 +860,12 @@ history_value_90: updated_at: '2022-10-26 12:46:16.125400000 Z' footprint: invoicing_profile_id: 1 + +history_value_91: + id: 91 + setting_id: 90 + value: 'true' + created_at: '2022-12-20 14:38:40.000421' + updated_at: '2022-12-20 14:38:40.000421' + footprint: + invoicing_profile_id: 1 diff --git a/test/fixtures/settings.yml b/test/fixtures/settings.yml index 9ee963d75..c34c2734e 100644 --- a/test/fixtures/settings.yml +++ b/test/fixtures/settings.yml @@ -526,3 +526,9 @@ setting_89: name: accounting_Product_code created_at: 2022-10-26 12:46:16.125400000 Z updated_at: 2022-10-26 12:46:16.125400000 Z + +setting_90: + id: 90 + name: machines_module + created_at: 2020-04-15 14:38:40.000421500 Z + updated_at: 2020-04-15 14:38:40.000421500 Z diff --git a/test/integration/availabilities/as_admin_test.rb b/test/integration/availabilities/as_admin_test.rb index 5a9cd5504..893e6300f 100644 --- a/test/integration/availabilities/as_admin_test.rb +++ b/test/integration/availabilities/as_admin_test.rb @@ -55,7 +55,7 @@ module Availabilities start_date = DateTime.current.utc.strftime('%Y-%m-%d') end_date = 7.days.from_now.utc.strftime('%Y-%m-%d') tz = Time.zone.tzinfo.name - get "/api/availabilities?start=#{start_date}&end=#{end_date}&timezone=#{tz}&_=1487169767960" + get "/api/availabilities?start=#{start_date}&end=#{end_date}&timezone=#{tz}&_=1487169767960&#{all_machines}" # Check response format & status assert_equal 200, response.status @@ -66,7 +66,7 @@ module Availabilities assert_not_empty availabilities, 'no availabilities were found' assert_not_nil availabilities[0], 'first availability was unexpectedly nil' - assert_not availabilities.map { |a| a[:available_type] }.include?('space'), 'unexpected space availability instead that it was disabled' + assert_not availabilities.pluck(:available_type).include?('space'), 'unexpected space availability instead that it was disabled' # re-enable spaces Setting.set('spaces_module', true) @@ -77,7 +77,7 @@ module Availabilities start_date = DateTime.current.utc.strftime('%Y-%m-%d') end_date = 7.days.from_now.utc.strftime('%Y-%m-%d') tz = Time.zone.tzinfo.name - get "/api/availabilities?start=#{start_date}&end=#{end_date}&timezone=#{tz}&_=1487169767960" + get "/api/availabilities?start=#{start_date}&end=#{end_date}&timezone=#{tz}&_=1487169767960&#{all_spaces}" # Check response format & status assert_equal 200, response.status @@ -88,7 +88,7 @@ module Availabilities assert_not_empty availabilities, 'no availabilities were found' assert_not_nil availabilities[0], 'first availability was unexpectedly nil' - assert availabilities.map { |a| a[:available_type] }.include?('space'), 'space availability not found instead that it was enabled' + assert availabilities.pluck(:available_type).include?('space'), 'space availability not found instead that it was enabled' end test 'create availabilities' do @@ -126,10 +126,10 @@ module Availabilities assert_not_nil availability[:id], 'availability ID was unexpectedly nil' # Check the slots - assert_equal (availability[:start_at].to_datetime + availability[:slot_duration].minutes * 4).iso8601, + assert_equal (availability[:start_at].to_datetime + (availability[:slot_duration].minutes * 4)).iso8601, availability[:end_at], 'expected end_at = start_at + 4 slots of 90 minutes' - assert_equal (slots_count + 4 * 3), Slot.count, 'expected (4*3) slots of 90 minutes were created' + assert_equal (slots_count + (4 * 3)), Slot.count, 'expected (4*3) slots of 90 minutes were created' assert_equal 90.minutes, Availability.find(availability[:id]).slots.first.duration # Check the recurrence @@ -137,5 +137,19 @@ module Availabilities availability[:end_date].to_datetime.utc.to_date, 'expected end_date = start_at + 2 weeks' end + + private + + def all_machines + Machine.all.map { |m| "m%5B%5D=#{m.id}" }.join('&') + end + + def all_trainings + Training.all.map { |m| "t%5B%5D=#{m.id}" }.join('&') + end + + def all_spaces + Space.all.map { |m| "s%5B%5D=#{m.id}" }.join('&') + end end end diff --git a/test/integration/availabilities/as_public_test.rb b/test/integration/availabilities/as_public_test.rb index 9d5e889ce..cd0ddff7d 100644 --- a/test/integration/availabilities/as_public_test.rb +++ b/test/integration/availabilities/as_public_test.rb @@ -3,11 +3,11 @@ require 'test_helper' class Availabilities::AsPublicTest < ActionDispatch::IntegrationTest - test 'get public machines availabilities' do + test 'get public machines availabilities if machines module is active' do start_date = DateTime.current.to_date end_date = (DateTime.current + 7.days).to_date - get "/api/availabilities/public?start=#{start_date.to_s}&end=#{end_date.to_s}&timezone=Europe%2FParis&#{all_machines}" + get "/api/availabilities/public?start=#{start_date}&end=#{end_date}&timezone=Europe%2FParis&#{all_machines}" # Check response format & status assert_equal 200, response.status @@ -24,11 +24,27 @@ class Availabilities::AsPublicTest < ActionDispatch::IntegrationTest end end + test 'get anymore machines availabilities if machines module is inactive' do + Setting.set('machines_module', false) + start_date = DateTime.current.to_date + end_date = (DateTime.current + 7.days).to_date + + get "/api/availabilities/public?start=#{start_date}&end=#{end_date}&timezone=Europe%2FParis&#{all_machines}" + + # Check response format & status + assert_equal 200, response.status + assert_equal Mime[:json], response.content_type + + # Check the correct availabilities was returned + availabilities = json_response(response.body) + assert_empty availabilities + end + test 'get public trainings availabilities' do start_date = DateTime.current.to_date end_date = (DateTime.current + 7.days).to_date - get "/api/availabilities/public?start=#{start_date.to_s}&end=#{end_date.to_s}&timezone=Europe%2FParis&#{all_trainings}" + get "/api/availabilities/public?start=#{start_date}&end=#{end_date}&timezone=Europe%2FParis&#{all_trainings}" # Check response format & status assert_equal 200, response.status @@ -49,7 +65,7 @@ class Availabilities::AsPublicTest < ActionDispatch::IntegrationTest start_date = DateTime.current.to_date end_date = (DateTime.current + 7.days).to_date - get "/api/availabilities/public?start=#{start_date.to_s}&end=#{end_date.to_s}&timezone=Europe%2FParis&#{all_spaces}" + get "/api/availabilities/public?start=#{start_date}&end=#{end_date}&timezone=Europe%2FParis&#{all_spaces}" # Check response format & status assert_equal 200, response.status @@ -70,7 +86,7 @@ class Availabilities::AsPublicTest < ActionDispatch::IntegrationTest start_date = 8.days.from_now.to_date end_date = 16.days.from_now.to_date - get "/api/availabilities/public?start=#{start_date.to_s}&end=#{end_date.to_s}&timezone=Europe%2FParis&evt=true" + get "/api/availabilities/public?start=#{start_date}&end=#{end_date}&timezone=Europe%2FParis&evt=true" # Check response format & status assert_equal 200, response.status