64 行
2.0 KiB
Ruby
64 行
2.0 KiB
Ruby
require 'rails_helper'
|
|
|
|
RSpec.describe 'Gekanator games API', type: :request do
|
|
let!(:user) { create_member_user! }
|
|
let!(:guessed_post) { Post.create!(title: 'guess', url: 'https://example.com/guess') }
|
|
let!(:correct_post) { Post.create!(title: 'correct', url: 'https://example.com/correct') }
|
|
|
|
describe 'POST /gekanator/games' do
|
|
it 'stores a won game' do
|
|
sign_in_as user
|
|
|
|
post '/gekanator/games', params: {
|
|
guessed_post_id: guessed_post.id,
|
|
won: true,
|
|
question_count: 3,
|
|
answers: [{ question_id: 'tag:1', answer: 'yes' }] }
|
|
|
|
expect(response).to have_http_status(:created)
|
|
game = GekanatorGame.find(json['id'])
|
|
expect(game.user).to eq(user)
|
|
expect(game.guessed_post).to eq(guessed_post)
|
|
expect(game.correct_post).to be_nil
|
|
expect(game.won).to eq(true)
|
|
expect(game.answers).to eq([{ 'question_id' => 'tag:1', 'answer' => 'yes' }])
|
|
end
|
|
|
|
it 'stores a lost game with the correct post' do
|
|
sign_in_as user
|
|
|
|
post '/gekanator/games', params: {
|
|
guessed_post_id: guessed_post.id,
|
|
correct_post_id: correct_post.id,
|
|
won: false,
|
|
question_count: 4,
|
|
answers: [{ question_id: 'tag:1', answer: 'no' }] }
|
|
|
|
expect(response).to have_http_status(:created)
|
|
expect(GekanatorGame.find(json['id']).correct_post).to eq(correct_post)
|
|
end
|
|
|
|
it 'rejects a lost game without the correct post' do
|
|
sign_in_as user
|
|
|
|
post '/gekanator/games', params: {
|
|
guessed_post_id: guessed_post.id,
|
|
won: false,
|
|
question_count: 4,
|
|
answers: [{ question_id: 'tag:1', answer: 'no' }] }
|
|
|
|
expect(response).to have_http_status(:unprocessable_entity)
|
|
end
|
|
|
|
it 'requires a user' do
|
|
post '/gekanator/games', params: {
|
|
guessed_post_id: guessed_post.id,
|
|
won: true,
|
|
question_count: 1,
|
|
answers: [] }
|
|
|
|
expect(response).to have_http_status(:unauthorized)
|
|
end
|
|
end
|
|
end
|