1
0
mirror of https://github.com/LaCasemate/fab-manager.git synced 2024-11-29 10:24:20 +01:00
fab-manager/test/integration/trainings_test.rb

95 lines
2.9 KiB
Ruby

# frozen_string_literal: true
require 'test_helper'
class TrainingsTest < ActionDispatch::IntegrationTest
def setup
@admin = User.find_by(username: 'admin')
login_as(@admin, scope: :user)
end
test 'create a training' do
name = 'First aid training'
post '/api/trainings',
params: {
training: {
name: name,
training_image_attributes: {
attachment: fixture_file_upload('/files/trainings/first-aid.jpg')
},
description: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore...',
machine_ids: [],
nb_total_places: 10,
public_page: true,
disabled: false,
advanced_accounting_attributes: {
code: '706200',
analytical_section: '9A41B'
}
}
},
headers: upload_headers
# Check response format & status
assert_equal 201, response.status, response.body
assert_equal Mime[:json], response.content_type
# Check the training was correctly created
db_training = Training.where(name: name).first
assert_not_nil db_training
assert_not_nil db_training.training_image.attachment
assert_equal name, db_training.name
assert_equal 10, db_training.nb_total_places
assert_empty db_training.machine_ids
assert_not_empty db_training.description
assert db_training.public_page
assert_not db_training.disabled
assert_equal '706200', db_training.advanced_accounting.code
assert_equal '9A41B', db_training.advanced_accounting.analytical_section
end
test 'update a training' do
description = '<p>lorem ipsum <strong>dolor</strong> sit amet</p>'
put '/api/trainings/3',
params: {
training: {
description: description,
public_page: false
}
}.to_json,
headers: default_headers
# Check response format & status
assert_equal 200, response.status, response.body
assert_equal Mime[:json], response.content_type
# Check the training was correctly updated
db_training = Training.find(3)
assert_equal description, db_training.description
assert_not db_training.public_page
training = json_response(response.body)
assert_equal description, training[:description]
assert_not training[:public_page]
end
test 'user validates a training' do
training = Training.find(3)
user = User.find(9)
put "/api/trainings/#{training.id}", params: { training: {
users: [user.id]
} }.to_json, headers: default_headers
# Check response status
assert_equal 204, response.status, response.body
# Check user is authorized
assert user.training_machine?(Machine.find(5))
end
test 'delete a training' do
delete '/api/trainings/4', headers: default_headers
assert_response :success
assert_empty response.body
end
end