90 lines
3 KiB
Ruby
90 lines
3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'rails_helper'
|
|
|
|
RSpec.describe 'Artifact Skills API', type: :request do
|
|
before do
|
|
# Create test skills in different groups
|
|
create(:artifact_skill, :group_i, :atk, modifier: 1)
|
|
create(:artifact_skill, :group_i, :hp, modifier: 2)
|
|
create(:artifact_skill, :group_ii, modifier: 1, name_en: 'C.A. DMG', name_jp: '奥義ダメ')
|
|
create(:artifact_skill, :group_iii, modifier: 1, name_en: 'Chain Burst DMG', name_jp: 'チェインダメ')
|
|
end
|
|
|
|
describe 'GET /api/v1/artifact_skills' do
|
|
it 'returns all artifact skills' do
|
|
get '/api/v1/artifact_skills'
|
|
|
|
expect(response).to have_http_status(:ok)
|
|
json = JSON.parse(response.body)
|
|
expect(json['artifact_skills'].length).to eq(4)
|
|
end
|
|
|
|
it 'filters by skill group' do
|
|
get '/api/v1/artifact_skills', params: { group: 'group_i' }
|
|
|
|
expect(response).to have_http_status(:ok)
|
|
json = JSON.parse(response.body)
|
|
expect(json['artifact_skills'].length).to eq(2)
|
|
expect(json['artifact_skills'].all? { |s| s['skill_group'] == 'group_i' }).to be true
|
|
end
|
|
|
|
it 'filters by polarity' do
|
|
create(:artifact_skill, :group_i, :negative, modifier: 99)
|
|
|
|
get '/api/v1/artifact_skills', params: { polarity: 'negative' }
|
|
|
|
expect(response).to have_http_status(:ok)
|
|
json = JSON.parse(response.body)
|
|
expect(json['artifact_skills'].all? { |s| s['polarity'] == 'negative' }).to be true
|
|
end
|
|
end
|
|
|
|
describe 'GET /api/v1/artifact_skills/for_slot/:slot' do
|
|
it 'returns Group I skills for slot 1' do
|
|
get '/api/v1/artifact_skills/for_slot/1'
|
|
|
|
expect(response).to have_http_status(:ok)
|
|
json = JSON.parse(response.body)
|
|
expect(json['artifact_skills'].all? { |s| s['skill_group'] == 'group_i' }).to be true
|
|
end
|
|
|
|
it 'returns Group I skills for slot 2' do
|
|
get '/api/v1/artifact_skills/for_slot/2'
|
|
|
|
expect(response).to have_http_status(:ok)
|
|
json = JSON.parse(response.body)
|
|
expect(json['artifact_skills'].all? { |s| s['skill_group'] == 'group_i' }).to be true
|
|
end
|
|
|
|
it 'returns Group II skills for slot 3' do
|
|
get '/api/v1/artifact_skills/for_slot/3'
|
|
|
|
expect(response).to have_http_status(:ok)
|
|
json = JSON.parse(response.body)
|
|
expect(json['artifact_skills'].all? { |s| s['skill_group'] == 'group_ii' }).to be true
|
|
end
|
|
|
|
it 'returns Group III skills for slot 4' do
|
|
get '/api/v1/artifact_skills/for_slot/4'
|
|
|
|
expect(response).to have_http_status(:ok)
|
|
json = JSON.parse(response.body)
|
|
expect(json['artifact_skills'].all? { |s| s['skill_group'] == 'group_iii' }).to be true
|
|
end
|
|
|
|
it 'returns error for invalid slot' do
|
|
get '/api/v1/artifact_skills/for_slot/5'
|
|
|
|
expect(response).to have_http_status(:unprocessable_entity)
|
|
json = JSON.parse(response.body)
|
|
expect(json['error']).to include('Slot must be between 1 and 4')
|
|
end
|
|
|
|
it 'returns error for slot 0' do
|
|
get '/api/v1/artifact_skills/for_slot/0'
|
|
|
|
expect(response).to have_http_status(:unprocessable_entity)
|
|
end
|
|
end
|
|
end
|