From 30f406de954bac1da5fef7cdd753c0af16f11051 Mon Sep 17 00:00:00 2001 From: Azul Date: Wed, 23 Jan 2013 13:13:41 +0100 Subject: added unit tests for user presenter changed the way the presenter works. Will need functional testing --- users/app/controllers/webfinger_controller.rb | 4 +- users/app/views/webfinger/search.xml.erb | 10 +++-- users/lib/webfinger/host_meta_presenter.rb | 2 +- users/lib/webfinger/user_presenter.rb | 36 ++++++++------- .../unit/webfinger/.user_presenter_test.rb.swp | Bin 0 -> 12288 bytes users/test/unit/webfinger/user_presenter_test.rb | 49 +++++++++++++++++++++ 6 files changed, 79 insertions(+), 22 deletions(-) create mode 100644 users/test/unit/webfinger/.user_presenter_test.rb.swp create mode 100644 users/test/unit/webfinger/user_presenter_test.rb diff --git a/users/app/controllers/webfinger_controller.rb b/users/app/controllers/webfinger_controller.rb index f28dd3e..8872802 100644 --- a/users/app/controllers/webfinger_controller.rb +++ b/users/app/controllers/webfinger_controller.rb @@ -12,8 +12,8 @@ class WebfingerController < ApplicationController username = params[:q].split('@')[0].to_s.downcase user = User.find_by_login(username) raise RECORD_NOT_FOUND, 'User not found' unless user.present? - @subject = Webfinger::UserPresenter.new(user, request) - respond_with @subject + @presenter = Webfinger::UserPresenter.new(user, request) + respond_with @presenter end end diff --git a/users/app/views/webfinger/search.xml.erb b/users/app/views/webfinger/search.xml.erb index 270383e..27f26d1 100644 --- a/users/app/views/webfinger/search.xml.erb +++ b/users/app/views/webfinger/search.xml.erb @@ -1,8 +1,10 @@ - acct:<%= @subject.email_identifier %> - "<%= user_url(@subject.subject) %>" - <%- if @subject.key.present? %> - + <%= @presenter.subject %> + <%- @presenter.aliases.each do |user_alias| %> + "<%= user_alias %>" + <% end %> + <%- @presenter.links.each do |rel, link| %> + type=<%=link[:type]%> href="<%= link[:key] %>"/> <% end %> diff --git a/users/lib/webfinger/host_meta_presenter.rb b/users/lib/webfinger/host_meta_presenter.rb index b48729c..6a6235f 100644 --- a/users/lib/webfinger/host_meta_presenter.rb +++ b/users/lib/webfinger/host_meta_presenter.rb @@ -15,7 +15,7 @@ class Webfinger::HostMetaPresenter "#{subject}/#{path}?#{query_param}={uri}" end - def to_json(options) + def to_json(options = {}) { subject: subject, links: { diff --git a/users/lib/webfinger/user_presenter.rb b/users/lib/webfinger/user_presenter.rb index 8288bff..41153a8 100644 --- a/users/lib/webfinger/user_presenter.rb +++ b/users/lib/webfinger/user_presenter.rb @@ -1,20 +1,26 @@ class Webfinger::UserPresenter include Rails.application.routes.url_helpers - attr_accessor :subject + attr_accessor :user - def initialize(subject, request) - @subject = subject + def initialize(user, request) + @user = user @request = request end - def email_identifier - "#{@subject.username}@#{@request.host}" + def to_json(options = {}) + { + subject: subject, + aliases: aliases, + links: links + }.to_json(options) end - def key - if @subject.public_key.present? - Base64.encode64(@subject.public_key.to_s) - end + def subject + "acct:#{@user.email_address}" + end + + def aliases + [ user_url(@user, :host => @request.host) ] end def links @@ -23,12 +29,12 @@ class Webfinger::UserPresenter return links end - def to_json(options) - { - subject: "acct:#{email_identifier}", - aliases: [ user_url(@subject, :host => @request.host) ], - links: links - }.to_json(options) + protected + + def key + if @user.public_key.present? + Base64.encode64(@user.public_key.to_s) + end end end diff --git a/users/test/unit/webfinger/.user_presenter_test.rb.swp b/users/test/unit/webfinger/.user_presenter_test.rb.swp new file mode 100644 index 0000000..5b92867 Binary files /dev/null and b/users/test/unit/webfinger/.user_presenter_test.rb.swp differ diff --git a/users/test/unit/webfinger/user_presenter_test.rb b/users/test/unit/webfinger/user_presenter_test.rb new file mode 100644 index 0000000..7f7a0d4 --- /dev/null +++ b/users/test/unit/webfinger/user_presenter_test.rb @@ -0,0 +1,49 @@ +require 'test_helper' +require 'webfinger' +require 'json' + +class Webfinger::UserPresenterTest < ActiveSupport::TestCase + + + setup do + @user = stub( + username: 'testuser', + email_address: "testuser@#{APP_CONFIG[:domain]}" + ) + @request = stub( + host: APP_CONFIG[:domain] + ) + end + + test "user without key has no links" do + @user.stubs :public_key => nil + presenter = Webfinger::UserPresenter.new(@user, @request) + assert_equal Hash.new, presenter.links + end + + test "user with key has corresponding link" do + @user.stubs :public_key => "here's a key" + presenter = Webfinger::UserPresenter.new(@user, @request) + assert_equal [:public_key], presenter.links.keys + assert_equal "PGP", presenter.links[:public_key][:type] + assert_equal presenter.send(:key), presenter.links[:public_key][:href] + end + + test "key is base64 encoded" do + @user.stubs :public_key => "here's a key" + presenter = Webfinger::UserPresenter.new(@user, @request) + assert_equal Base64.encode64(@user.public_key), presenter.send(:key) + end + + test "creates proper json representation" do + @user.stubs :public_key => "here's a key" + presenter = Webfinger::UserPresenter.new(@user, @request) + hash = JSON.parse presenter.to_json + assert_equal ["subject", "links", "aliases"].sort, hash.keys.sort + hash.each do |key, value| + assert_equal presenter.send(key.to_sym).to_json, value.to_json + end + end + + +end -- cgit v1.2.3