Improve session tests
This commit is contained in:
parent
f11caaf469
commit
a31cdb29e4
3 changed files with 74 additions and 45 deletions
|
@ -13,13 +13,14 @@ module Mattermost
|
||||||
# This class however skips the button click, and also the approval phase to
|
# This class however skips the button click, and also the approval phase to
|
||||||
# speed up the process and keep it without manual action and get a session
|
# speed up the process and keep it without manual action and get a session
|
||||||
# going.
|
# going.
|
||||||
class Mattermost
|
class Session
|
||||||
include Doorkeeper::Helpers::Controller
|
include Doorkeeper::Helpers::Controller
|
||||||
include HTTParty
|
include HTTParty
|
||||||
|
|
||||||
attr_accessor :current_resource_owner
|
attr_accessor :current_resource_owner
|
||||||
|
|
||||||
def initialize(uri, current_user)
|
def initialize(uri, current_user)
|
||||||
|
# Sets the base uri for HTTParty, so we can use paths
|
||||||
self.class.base_uri(uri)
|
self.class.base_uri(uri)
|
||||||
|
|
||||||
@current_resource_owner = current_user
|
@current_resource_owner = current_user
|
||||||
|
@ -27,8 +28,10 @@ module Mattermost
|
||||||
|
|
||||||
def with_session
|
def with_session
|
||||||
raise NoSessionError unless create
|
raise NoSessionError unless create
|
||||||
yield
|
result = yield
|
||||||
destroy
|
destroy
|
||||||
|
|
||||||
|
result
|
||||||
end
|
end
|
||||||
|
|
||||||
# Next methods are needed for Doorkeeper
|
# Next methods are needed for Doorkeeper
|
||||||
|
@ -85,7 +88,7 @@ module Mattermost
|
||||||
end
|
end
|
||||||
|
|
||||||
def request_token
|
def request_token
|
||||||
@request_token ||= if @token_uri
|
@request_token ||= begin
|
||||||
response = get(@token_uri, follow_redirects: false)
|
response = get(@token_uri, follow_redirects: false)
|
||||||
response.headers['token'] if 200 <= response.code && response.code < 400
|
response.headers['token'] if 200 <= response.code && response.code < 400
|
||||||
end
|
end
|
|
@ -1,42 +0,0 @@
|
||||||
require 'spec_helper'
|
|
||||||
|
|
||||||
describe Mattermost::Mattermost do
|
|
||||||
let(:user) { create(:user) }
|
|
||||||
|
|
||||||
subject { described_class.new('http://localhost:8065', user) }
|
|
||||||
|
|
||||||
# Needed for doorman to function
|
|
||||||
it { is_expected.to respond_to(:current_resource_owner) }
|
|
||||||
it { is_expected.to respond_to(:request) }
|
|
||||||
it { is_expected.to respond_to(:authorization) }
|
|
||||||
it { is_expected.to respond_to(:strategy) }
|
|
||||||
|
|
||||||
describe '#with session' do
|
|
||||||
let!(:stub) do
|
|
||||||
WebMock.stub_request(:get, 'http://localhost:8065/api/v3/oauth/gitlab/login').
|
|
||||||
to_return(headers: { 'location' => 'http://mylocation.com' }, status: 307)
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'without oauth uri' do
|
|
||||||
it 'makes a request to the oauth uri' do
|
|
||||||
expect { subject.with_session }.to raise_error(Mattermost::NoSessionError)
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'with oauth_uri' do
|
|
||||||
let!(:doorkeeper) do
|
|
||||||
Doorkeeper::Application.create(name: "GitLab Mattermost",
|
|
||||||
redirect_uri: "http://localhost:8065/signup/gitlab/complete\nhttp://localhost:8065/login/gitlab/complete",
|
|
||||||
scopes: "")
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'without token_uri' do
|
|
||||||
it 'can not create a session' do
|
|
||||||
expect do
|
|
||||||
subject.with_session
|
|
||||||
end.to raise_error(Mattermost::NoSessionError)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
68
spec/lib/mattermost/session_spec.rb
Normal file
68
spec/lib/mattermost/session_spec.rb
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe Mattermost::Session do
|
||||||
|
let(:user) { create(:user) }
|
||||||
|
|
||||||
|
subject { described_class.new('http://localhost:8065', user) }
|
||||||
|
|
||||||
|
# Needed for doorkeeper to function
|
||||||
|
it { is_expected.to respond_to(:current_resource_owner) }
|
||||||
|
it { is_expected.to respond_to(:request) }
|
||||||
|
it { is_expected.to respond_to(:authorization) }
|
||||||
|
it { is_expected.to respond_to(:strategy) }
|
||||||
|
|
||||||
|
describe '#with session' do
|
||||||
|
let(:location) { 'http://location.tld' }
|
||||||
|
let!(:stub) do
|
||||||
|
WebMock.stub_request(:get, 'http://localhost:8065/api/v3/oauth/gitlab/login').
|
||||||
|
to_return(headers: { 'location' => location }, status: 307)
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'without oauth uri' do
|
||||||
|
it 'makes a request to the oauth uri' do
|
||||||
|
expect { subject.with_session }.to raise_error(Mattermost::NoSessionError)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with oauth_uri' do
|
||||||
|
let!(:doorkeeper) do
|
||||||
|
Doorkeeper::Application.create(name: "GitLab Mattermost",
|
||||||
|
redirect_uri: "http://localhost:8065/signup/gitlab/complete\nhttp://localhost:8065/login/gitlab/complete",
|
||||||
|
scopes: "")
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'without token_uri' do
|
||||||
|
it 'can not create a session' do
|
||||||
|
expect do
|
||||||
|
subject.with_session
|
||||||
|
end.to raise_error(Mattermost::NoSessionError)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with token_uri' do
|
||||||
|
let(:state) { "eyJhY3Rpb24iOiJsb2dpbiIsImhhc2giOiIkMmEkMTAkVC9wYVlEaTdIUS8vcWdKRmdOOUllZUptaUNJWUlvNVNtNEcwU2NBMXFqelNOVmVPZ1cxWUsifQ%3D%3D" }
|
||||||
|
let(:location) { "http://locahost:8065/oauth/authorize?response_type=code&client_id=#{doorkeeper.uid}&redirect_uri=http%3A%2F%2Flocalhost:8065%2Fsignup%2Fgitlab%2Fcomplete&state=#{state}" }
|
||||||
|
|
||||||
|
before do
|
||||||
|
WebMock.stub_request(:get, /http:\/\/localhost:8065\/signup\/gitlab\/complete*/).
|
||||||
|
to_return(headers: { 'token' => 'thisworksnow' }, status: 202)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'can setup a session' do
|
||||||
|
expect(subject).to receive(:destroy)
|
||||||
|
|
||||||
|
subject.with_session { 1 + 1 }
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'returns the value of the block' do
|
||||||
|
WebMock.stub_request(:post, "http://localhost:8065/api/v3/users/logout").
|
||||||
|
to_return(headers: { 'token' => 'thisworksnow' }, status: 200)
|
||||||
|
|
||||||
|
value = subject.with_session { 1 + 1 }
|
||||||
|
|
||||||
|
expect(value).to be(2)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue