# frozen_string_literal: true require 'test_helper' class ReservationContextsTest < ActionDispatch::IntegrationTest def setup @admin = User.find_by(username: 'admin') login_as(@admin, scope: :user) end test 'create a reservation_context' do applicable_on = ["machine", "space", "training"] post '/api/reservation_contexts', params: { name: 'Enseignant', applicable_on: applicable_on }.to_json, headers: default_headers # Check response format & reservation_context assert_equal 201, response.status, response.body assert_match Mime[:json].to_s, response.content_type # Check the correct reservation_context was created res = json_response(response.body) reservation_context = ReservationContext.where(id: res[:id]).first assert_not_nil reservation_context, 'reservation_context was not created in database' assert_equal 'Enseignant', res[:name] assert_equal applicable_on, res[:applicable_on] end test 'update a reservation_context' do applicable_on = ["machine"] patch '/api/reservation_contexts/1', params: { name: 'Nouveau nom', applicable_on: applicable_on }.to_json, headers: default_headers # Check response format & reservation_context assert_equal 200, response.status, response.body assert_match Mime[:json].to_s, response.content_type # Check the reservation_context was updated res = json_response(response.body) assert_equal 1, res[:id] assert_equal 'Nouveau nom', res[:name] assert_equal applicable_on, res[:applicable_on] end test 'list all reservation_contexts' do logout @admin get '/api/reservation_contexts' # Check response format & reservation_context assert_equal 200, response.status, response.body assert_match Mime[:json].to_s, response.content_type # Check the list items are ok reservation_contexts = json_response(response.body) assert_equal ReservationContext.count, reservation_contexts.count assert_equal reservation_contexts(:reservation_context_1).name, reservation_contexts[0][:name] end test "list all applicable_on possible values" do get '/api/reservation_contexts/applicable_on_values' # Check response format & reservation_context assert_equal 200, response.status, response.body assert_match Mime[:json].to_s, response.content_type # Check the list items are ok applicable_on_values = json_response(response.body) assert_equal %w[machine space training], applicable_on_values end test 'delete a reservation_context' do reservation_context = ReservationContext.create!(name: 'Gone too soon') delete "/api/reservation_contexts/#{reservation_context.id}" assert_response :success assert_empty response.body assert_raise ActiveRecord::RecordNotFound do reservation_context.reload end end end