summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAsh McKenzie <amckenzie@gitlab.com>2018-08-01 13:47:33 +1000
committerAsh McKenzie <amckenzie@gitlab.com>2018-08-01 15:08:45 +1000
commit3f421a018e918865a3a36300a4dcefc5d1c8676a (patch)
tree65c018b25b0c274b4911c0b754b3b5f1c2e3d59e
parent5663f7a16f210bdcd6f0f884c790670fd8a9549f (diff)
downloadgitlab-shell-3f421a018e918865a3a36300a4dcefc5d1c8676a.tar.gz
Update Actor::Username, add specs
-rw-r--r--lib/actor/username.rb14
-rw-r--r--lib/gitlab_shell.rb2
-rw-r--r--spec/actor/username_spec.rb79
-rw-r--r--spec/actor_spec.rb6
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