Sha256: 725545b7fcba0dc776491f0a13b22511bad5449af184c7aba8e10a75d4d05874

Contents?: true

Size: 1.3 KB

Versions: 2

Compression:

Stored size: 1.3 KB

Contents

# frozen_string_literal: true

require 'spec_helper'

describe TriviaCrack::API::Login do
  let(:client) { (Class.new(APIStub) { include TriviaCrack::API::Login }).new }

  let(:response) { double(status: code, body: raw_data) }

  before { allow(Faraday).to receive(:post) { response } }

  describe '#login' do
    subject { client.login email, password }

    let(:email) { 'user@example.com' }
    let(:password) { 'password123' }
    let(:raw_data) { SpecData.get 'login.json' }

    context 'given that the request is successful' do
      let(:code) { 200 }

      it {
        expect(TriviaCrack::Parsers::SessionParser).to receive(:parse).once
        subject
      }
      its(:user_id) { is_expected.to be 111 }
      its(:username) { is_expected.to eq 'example' }
      its(:session_id) { is_expected.to eq 'session123' }
    end

    context 'given that the request fails' do
      let(:code) { 400 }

      it { expect { subject }.to raise_error TriviaCrack::Errors::RequestError }
      it {
        expect { subject }.to raise_error(an_instance_of(TriviaCrack::Errors::RequestError)
        .and(having_attributes(code: code)))
      }
      it {
        expect { subject }.to raise_error(an_instance_of(TriviaCrack::Errors::RequestError)
        .and(having_attributes(url: '/api/login')))
      }
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
triviacrack-0.8.0 spec/api/login_spec.rb
triviacrack-0.7.0 spec/api/login_spec.rb