diff options
author | Ash McKenzie <amckenzie@gitlab.com> | 2018-08-01 13:47:33 +1000 |
---|---|---|
committer | Ash McKenzie <amckenzie@gitlab.com> | 2018-08-01 15:08:45 +1000 |
commit | 3f421a018e918865a3a36300a4dcefc5d1c8676a (patch) | |
tree | 65c018b25b0c274b4911c0b754b3b5f1c2e3d59e | |
parent | 5663f7a16f210bdcd6f0f884c790670fd8a9549f (diff) | |
download | gitlab-shell-3f421a018e918865a3a36300a4dcefc5d1c8676a.tar.gz |
Update Actor::Username, add specs
-rw-r--r-- | lib/actor/username.rb | 14 | ||||
-rw-r--r-- | lib/gitlab_shell.rb | 2 | ||||
-rw-r--r-- | spec/actor/username_spec.rb | 79 | ||||
-rw-r--r-- | spec/actor_spec.rb | 6 |
4 files changed, 96 insertions, 5 deletions
diff --git a/lib/actor/username.rb b/lib/actor/username.rb index e0a07dd..cd9d6e5 100644 --- a/lib/actor/username.rb +++ b/lib/actor/username.rb @@ -1,9 +1,8 @@ require_relative 'base' +require_relative 'key' module Actor - class Username < Base - alias username identifier - + class Username < Key def self.identifier_prefix 'username'.freeze end @@ -13,7 +12,14 @@ module Actor end def self.id_regex - /\Ausername\-\d+\Z/ + /\Ausername\-[a-z0-9-]+\z/ + end + + private + + # Override Base#label + def label + 'user' end end end diff --git a/lib/gitlab_shell.rb b/lib/gitlab_shell.rb index 7b2b2b1..6b5ea0d 100644 --- a/lib/gitlab_shell.rb +++ b/lib/gitlab_shell.rb @@ -33,7 +33,7 @@ class GitlabShell end parsed_command = parse_cmd(origin_cmd) - action = determine_action(parsed_command) # FIXME: watch out + action = determine_action(parsed_command) action.execute(parsed_command.command, parsed_command.args) rescue GitlabNet::ApiUnreachableError $stderr.puts "GitLab: Failed to authorize your Git request: internal API unreachable" diff --git a/spec/actor/username_spec.rb b/spec/actor/username_spec.rb new file mode 100644 index 0000000..a02bf12 --- /dev/null +++ b/spec/actor/username_spec.rb @@ -0,0 +1,79 @@ +require_relative '../spec_helper' +require_relative '../../lib/actor/username' + +describe Actor::Username do + let(:username) { 'testuser' } + let(:api) { double(GitlabNet) } + + let(:discover_payload) { { 'username' => username } } + let(:audit_usernames) { nil } + + before do + allow(GitlabNet).to receive(:new).and_return(api) + allow(api).to receive(:discover).with(subject).and_return(discover_payload) + end + + describe '.from' do + it 'returns an instance of Actor::Username' do + expect(described_class.from("username-#{username}")).to be_a(Actor::Username) + end + + it 'has an id == 1' do + expect(described_class.from('username-1').id).to eq '1' + end + end + + describe '.identifier_prefix' do + it "returns 'user'" do + expect(described_class.identifier_prefix).to eql 'username' + end + end + + describe '.identifier_key' do + it "returns 'username'" do + expect(described_class.identifier_key).to eql 'username' + end + end + + subject { described_class.new(username, audit_usernames: audit_usernames) } + + describe '#username' do + context 'without a valid user' do + it "returns '@testuser'" do + expect(subject.username).to eql "@#{username}" + end + end + + context 'without a valid user' do + let(:discover_payload) { nil } + + it "returns 'Anonymous'" do + expect(subject.username).to eql 'Anonymous' + end + end + end + + describe '#identifier' do + it "returns 'username-testuser'" do + expect(subject.identifier).to eql 'username-testuser' + end + end + + describe '#log_username' do + context 'when audit_usernames is true' do + let(:audit_usernames) { true } + + it "returns '@testuser'" do + expect(subject.log_username).to eql "@#{username}" + end + end + + context 'when audit_usernames is false' do + let(:audit_usernames) { false } + + it "returns 'user with identifier username-testuser'" do + expect(subject.log_username).to eql "user with identifier username-#{username}" + end + end + end +end diff --git a/spec/actor_spec.rb b/spec/actor_spec.rb index c88c405..57cc718 100644 --- a/spec/actor_spec.rb +++ b/spec/actor_spec.rb @@ -23,6 +23,12 @@ describe Actor do expect(described_class.new_from('user-1')).to be_a(Actor::User) end end + + context 'of Username' do + it 'returns an instance of Username' do + expect(described_class.new_from('username-john1')).to be_a(Actor::Username) + end + end end end end |