diff options
| -rw-r--r-- | lib/user.rb | 25 | ||||
| -rw-r--r-- | spec/user_spec.rb | 52 |
2 files changed, 77 insertions, 0 deletions
diff --git a/lib/user.rb b/lib/user.rb new file mode 100644 index 0000000..6078083 --- /dev/null +++ b/lib/user.rb @@ -0,0 +1,25 @@ +require_relative 'gitlab_net' + +class User + ANONYMOUS_USER = 'Anonymous'.freeze + + def initialize(key_id, audit_usernames: false) + @key_id = key_id + @audit_usernames = audit_usernames + end + + def username + @username ||= begin + user = GitlabNet.new.discover(key_id) + user ? "@#{user['username']}" : ANONYMOUS_USER + end + end + + def log_username + audit_usernames ? username : "user with key #{key_id}" + end + + private + + attr_reader :key_id, :audit_usernames +end diff --git a/spec/user_spec.rb b/spec/user_spec.rb new file mode 100644 index 0000000..5677aec --- /dev/null +++ b/spec/user_spec.rb @@ -0,0 +1,52 @@ +require_relative 'spec_helper' +require_relative '../lib/user' + +describe User, vcr: true do + let(:key_id) { 'key-1' } + 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(key_id).and_return(discover_payload) + end + + subject { described_class.new(key_id, audit_usernames: audit_usernames) } + + describe '#username' do + context 'with a valid user' do + it "returns '@testuser'" do + expect(subject.username).to eql '@testuser' + 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 '#log_username' do + context 'when audit_usernames is true' do + let(:audit_usernames) { true } + + it "returns 'testuser'" do + expect(subject.log_username).to eql '@testuser' + end + end + + context 'when audit_usernames is false' do + let(:audit_usernames) { false } + + it "returns 'user with key key-1'" do + expect(subject.log_username).to eql 'user with key key-1' + end + end + end +end |
