diff --git a/spec/requests/api/v1/inventory_columns_controller_spec.rb b/spec/requests/api/v1/inventory_columns_controller_spec.rb index 9d7b0d9c3..612bf457e 100644 --- a/spec/requests/api/v1/inventory_columns_controller_spec.rb +++ b/spec/requests/api/v1/inventory_columns_controller_spec.rb @@ -86,4 +86,115 @@ RSpec.describe 'Api::V1::InventoryColumnsController', type: :request do expect(hash_body).to match({}) end end + + describe 'POST inventory_column, #create' do + before :all do + @valid_headers['Content-Type'] = 'application/json' + @request_body = { data: + { type: 'inventory_columns', + attributes: { + name: Faker::Name.unique.name + } } } + end + + it 'Response with correct inventory column' do + hash_body = nil + post api_v1_team_inventory_columns_path( + team_id: @teams.first.id, + inventory_id: @teams.first.repositories.first.id + ), params: @request_body.to_json, headers: @valid_headers + expect(response).to have_http_status 201 + expect { hash_body = json }.not_to raise_exception + expect(hash_body[:data]).to match( + ActiveModelSerializers::SerializableResource + .new(RepositoryColumn.last, + serializer: Api::V1::InventoryColumnSerializer, + include: :inventory_cells) + .as_json[:data] + ) + end + + it 'When invalid request, user in not member of the team' do + hash_body = nil + post api_v1_team_inventory_columns_path( + team_id: @teams.second.id, + inventory_id: @teams.first.repositories.first.id + ), params: @request_body.to_json, headers: @valid_headers + expect(response).to have_http_status 403 + expect { hash_body = json }.not_to raise_exception + expect(hash_body).to match({}) + end + + it 'When invalid request, non existing inventory' do + hash_body = nil + post api_v1_team_inventory_columns_path( + team_id: @teams.first.id, + inventory_id: 123 + ), params: @request_body.to_json, headers: @valid_headers + expect(response).to have_http_status 404 + expect { hash_body = json }.not_to raise_exception + expect(hash_body).to match({}) + end + + it 'When invalid request, repository from another team' do + hash_body = nil + post api_v1_team_inventory_columns_path( + team_id: @teams.first.id, + inventory_id: @teams.second.repositories.first.id + ), params: @request_body.to_json, headers: @valid_headers + expect(response).to have_http_status(404) + expect { hash_body = json }.not_to raise_exception + expect(hash_body).to match({}) + end + + it 'When invalid request, incorrect type' do + invalid_request_body = @request_body.deep_dup + invalid_request_body[:data][:type] = 'repository_rows' + hash_body = nil + post api_v1_team_inventory_columns_path( + team_id: @teams.first.id, + inventory_id: @teams.first.repositories.first.id + ), params: invalid_request_body.to_json, headers: @valid_headers + expect(response).to have_http_status(400) + expect { hash_body = json }.to_not raise_exception + expect(hash_body).to match({}) + end + + it 'When invalid request, missing data param' do + hash_body = nil + post api_v1_team_inventory_columns_path( + team_id: @teams.first.id, + inventory_id: @teams.first.repositories.first.id + ), params: {}, headers: @valid_headers + expect(response).to have_http_status(400) + expect { hash_body = json }.to_not raise_exception + expect(hash_body).to match({}) + end + + it 'When invalid request, missing attributes param' do + invalid_request_body = @request_body.deep_dup + invalid_request_body[:data].delete(:attributes) + hash_body = nil + post api_v1_team_inventory_columns_path( + team_id: @teams.first.id, + inventory_id: @teams.first.repositories.first.id + ), params: invalid_request_body.to_json, headers: @valid_headers + expect(response).to have_http_status(400) + expect { hash_body = json }.to_not raise_exception + expect(hash_body).to match({}) + end + + it 'When invalid request, missing type param' do + invalid_request_body = @request_body.deep_dup + invalid_request_body[:data].delete(:type) + hash_body = nil + post api_v1_team_inventory_columns_path( + team_id: @teams.first.id, + inventory_id: @teams.first.repositories.first.id + ), params: invalid_request_body.to_json, headers: @valid_headers + expect(response).to have_http_status(400) + expect { hash_body = json }.to_not raise_exception + expect(hash_body).to match({}) + end + end end