Added unit tests to test user avatars.
This commit is contained in:
parent
3ab6773c8c
commit
eb0a01eaa1
4 changed files with 162 additions and 34 deletions
|
@ -18,7 +18,7 @@ class App.User extends App.Model
|
|||
{ name: 'street', display: 'Street', tag: 'input', type: 'text', limit: 100, null: true, class: 'span4', signup: false, quick: true, info: true },
|
||||
{ name: 'zip', display: 'Zip', tag: 'input', type: 'text', limit: 100, null: true, class: 'span4', signup: false, quick: true, info: true },
|
||||
{ name: 'city', display: 'City', tag: 'input', type: 'text', limit: 100, null: true, class: 'span4', signup: false, quick: true, info: true },
|
||||
{ name: 'password', display: 'Password', tag: 'input', type: 'password', limit: 50, null: true, autocomplete: 'off', class: 'span4', signup: true, quick: false, },
|
||||
{ name: 'password', display: 'Password', tag: 'input', type: 'password', limit: 50, null: true, autocomplete: 'off', class: 'span4', signup: true, quick: false },
|
||||
{ name: 'note', display: 'Note', tag: 'textarea', note: 'Notes are visible to agents only, never to customers.', limit: 250, null: true, class: 'span4', quick: true, info: true },
|
||||
{ name: 'role_ids', display: 'Roles', tag: 'checkbox', multiple: true, null: false, relation: 'Role', class: 'span4' },
|
||||
{ name: 'group_ids', display: 'Groups', tag: 'checkbox', multiple: true, null: true, relation: 'Group', class: 'span4', invite_agent: true },
|
||||
|
|
|
@ -590,31 +590,19 @@ curl http://localhost/api/v1/users/image/8d6cca1c6bdc226cf2ba131e264ca2c7 -v -u
|
|||
response.headers["Cache-Control"] = "cache, store, max-age=31536000, must-revalidate"
|
||||
response.headers["Pragma"] = "cache"
|
||||
|
||||
# serve user image
|
||||
user = User.where( :image => params[:hash] ).first
|
||||
if user
|
||||
# find file
|
||||
list = Store.list( :object => 'User::Image', :o_id => user.id )
|
||||
if list && list[0]
|
||||
file = Store.find( list[0] )
|
||||
send_data(
|
||||
file.content,
|
||||
:filename => file.filename,
|
||||
:type => file.preferences['Content-Type'] || file.preferences['Mime-Type'],
|
||||
:disposition => 'inline'
|
||||
)
|
||||
return
|
||||
end
|
||||
image = user.get_image
|
||||
send_data(
|
||||
image[:content],
|
||||
:filename => image[:filename],
|
||||
:type => image[:content_type],
|
||||
:disposition => 'inline'
|
||||
)
|
||||
return
|
||||
end
|
||||
|
||||
# serve defalt image
|
||||
image = 'R0lGODdhMAAwAOMAAMzMzJaWlr6+vqqqqqOjo8XFxbe3t7GxsZycnAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAMAAwAAAEcxDISau9OOvNu/9gKI5kaZ5oqq5s675wLM90bd94ru98TwuAA+KQAQqJK8EAgBAgMEqmkzUgBIeSwWGZtR5XhSqAULACCoGCJGwlm1MGQrq9RqgB8fm4ZTUgDBIEcRR9fz6HiImKi4yNjo+QkZKTlJWWkBEAOw=='
|
||||
send_data(
|
||||
Base64.decode64(image),
|
||||
:filename => 'image.gif',
|
||||
:type => 'image/gif',
|
||||
:disposition => 'inline',
|
||||
)
|
||||
render :json => {}, :status => 404
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -487,6 +487,48 @@ returns
|
|||
self.save
|
||||
end
|
||||
|
||||
=begin
|
||||
|
||||
get image of user
|
||||
|
||||
user = User.find(123)
|
||||
result = user.get_image
|
||||
|
||||
returns
|
||||
|
||||
result = {
|
||||
:filename => 'some filename',
|
||||
:content_type => 'image/png',
|
||||
:content => bin_string,
|
||||
}
|
||||
|
||||
=end
|
||||
|
||||
def get_image
|
||||
|
||||
# find file
|
||||
list = Store.list( :object => 'User::Image', :o_id => self.id )
|
||||
puts list.inspect
|
||||
if list && list[0]
|
||||
file = Store.find( list[0] )
|
||||
result = {
|
||||
:content => file.content,
|
||||
:filename => file.filename,
|
||||
:content_type => file.preferences['Content-Type'] || file.preferences['Mime-Type'],
|
||||
}
|
||||
return result
|
||||
end
|
||||
|
||||
# serve defalt image
|
||||
image = 'R0lGODdhMAAwAOMAAMzMzJaWlr6+vqqqqqOjo8XFxbe3t7GxsZycnAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAMAAwAAAEcxDISau9OOvNu/9gKI5kaZ5oqq5s675wLM90bd94ru98TwuAA+KQAQqJK8EAgBAgMEqmkzUgBIeSwWGZtR5XhSqAULACCoGCJGwlm1MGQrq9RqgB8fm4ZTUgDBIEcRR9fz6HiImKi4yNjo+QkZKTlJWWkBEAOw=='
|
||||
result = {
|
||||
:content => Base64.decode64(image),
|
||||
:filename => 'image.gif',
|
||||
:content_type => 'image/gif',
|
||||
}
|
||||
return result
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def check_name
|
||||
|
@ -552,6 +594,7 @@ returns
|
|||
if self.email
|
||||
hash = Digest::MD5.hexdigest(self.email)
|
||||
self.image_source = "http://www.gravatar.com/avatar/#{hash}?s=48&d=404"
|
||||
#puts "#{self.email}: http://www.gravatar.com/avatar/#{hash}?s=48&d=404"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -566,20 +609,20 @@ returns
|
|||
if !response.success?
|
||||
self.update_column( :image, 'none' )
|
||||
self.cache_delete
|
||||
#puts "WARNING: Can't fetch '#{self.image_source}', http code: #{response.code.to_s}"
|
||||
#puts "WARNING: Can't fetch '#{self.image_source}' (maybe no avatar available), http code: #{response.code.to_s}"
|
||||
#raise "Can't fetch '#{self.image_source}', http code: #{response.code.to_s}"
|
||||
return
|
||||
end
|
||||
#puts "NOTICE: Fetch '#{self.image_source}', http code: #{response.code.to_s}"
|
||||
|
||||
# store image local
|
||||
hash = Digest::MD5.hexdigest( response.body )
|
||||
|
||||
# check if image has changed
|
||||
return if self.image == hash
|
||||
|
||||
#puts "NOTICE: update image in store"
|
||||
# save new image
|
||||
self.update_column( :image, hash )
|
||||
self.cache_delete
|
||||
Store.remove( :object => 'User::Image', :o_id => self.id )
|
||||
Store.add(
|
||||
:object => 'User::Image',
|
||||
|
@ -591,6 +634,7 @@ returns
|
|||
},
|
||||
:created_by_id => self.updated_by_id,
|
||||
)
|
||||
self.cache_delete
|
||||
end
|
||||
|
||||
def check_password
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
# encoding: utf-8
|
||||
require 'test_helper'
|
||||
|
||||
|
||||
class UserTest < ActiveSupport::TestCase
|
||||
test 'user' do
|
||||
tests = [
|
||||
{
|
||||
:name => '#1 - simple create',
|
||||
:create => {
|
||||
:firstname => 'Firstname',
|
||||
:lastname => 'Lastname',
|
||||
|
@ -16,11 +17,13 @@ class UserTest < ActiveSupport::TestCase
|
|||
:create_verify => {
|
||||
:firstname => 'Firstname',
|
||||
:lastname => 'Lastname',
|
||||
:image => 'none',
|
||||
:email => 'some@example.com',
|
||||
:login => 'some@example.com',
|
||||
},
|
||||
},
|
||||
{
|
||||
:name => '#2 - simple create - no lastname',
|
||||
:create => {
|
||||
:firstname => 'Firstname Lastname',
|
||||
:lastname => '',
|
||||
|
@ -32,11 +35,13 @@ class UserTest < ActiveSupport::TestCase
|
|||
:create_verify => {
|
||||
:firstname => 'Firstname',
|
||||
:lastname => 'Lastname',
|
||||
:image => 'none',
|
||||
:email => 'some@example.com',
|
||||
:login => 'some@example.com',
|
||||
},
|
||||
},
|
||||
{
|
||||
:name => '#3 - simple create - nil as lastname',
|
||||
:create => {
|
||||
:firstname => 'Firstname Lastname',
|
||||
:lastname => nil,
|
||||
|
@ -48,11 +53,13 @@ class UserTest < ActiveSupport::TestCase
|
|||
:create_verify => {
|
||||
:firstname => 'Firstname',
|
||||
:lastname => 'Lastname',
|
||||
:image => 'none',
|
||||
:email => 'some@example.com',
|
||||
:login => 'some@example.com',
|
||||
},
|
||||
},
|
||||
{
|
||||
:name => '#4 - simple create - no lastname, firstname with ","',
|
||||
:create => {
|
||||
:firstname => 'Lastname, Firstname',
|
||||
:lastname => '',
|
||||
|
@ -69,11 +76,12 @@ class UserTest < ActiveSupport::TestCase
|
|||
},
|
||||
},
|
||||
{
|
||||
:name => '#5 - simple create - no lastname/firstname',
|
||||
:create => {
|
||||
:firstname => '',
|
||||
:lastname => '',
|
||||
:email => 'firstname.lastname@example.com',
|
||||
:login => 'login',
|
||||
:login => 'login-1',
|
||||
:updated_by_id => 1,
|
||||
:created_by_id => 1,
|
||||
},
|
||||
|
@ -81,15 +89,16 @@ class UserTest < ActiveSupport::TestCase
|
|||
:firstname => 'Firstname',
|
||||
:lastname => 'Lastname',
|
||||
:email => 'firstname.lastname@example.com',
|
||||
:login => 'login',
|
||||
:login => 'login-1',
|
||||
},
|
||||
},
|
||||
{
|
||||
:name => '#6 - simple create - no lastname/firstnam',
|
||||
:create => {
|
||||
:firstname => '',
|
||||
:lastname => '',
|
||||
:email => 'FIRSTNAME.lastname@example.com',
|
||||
:login => 'login',
|
||||
:login => 'login-2',
|
||||
:updated_by_id => 1,
|
||||
:created_by_id => 1,
|
||||
},
|
||||
|
@ -97,15 +106,16 @@ class UserTest < ActiveSupport::TestCase
|
|||
:firstname => 'Firstname',
|
||||
:lastname => 'Lastname',
|
||||
:email => 'firstname.lastname@example.com',
|
||||
:login => 'login',
|
||||
:login => 'login-2',
|
||||
},
|
||||
},
|
||||
{
|
||||
:name => '#7 - simple create - nill as fristname and lastname',
|
||||
:create => {
|
||||
:firstname => nil,
|
||||
:lastname => nil,
|
||||
:email => 'FIRSTNAME.lastname@example.com',
|
||||
:login => 'login',
|
||||
:login => 'login-3',
|
||||
:updated_by_id => 1,
|
||||
:created_by_id => 1,
|
||||
},
|
||||
|
@ -113,21 +123,107 @@ class UserTest < ActiveSupport::TestCase
|
|||
:firstname => 'Firstname',
|
||||
:lastname => 'Lastname',
|
||||
:email => 'firstname.lastname@example.com',
|
||||
:login => 'login',
|
||||
:login => 'login-3',
|
||||
},
|
||||
},
|
||||
{
|
||||
:name => '#8 - update with avatar check',
|
||||
:create => {
|
||||
:firstname => 'Bob',
|
||||
:lastname => 'Smith',
|
||||
:email => 'bob.smith@example.com',
|
||||
:login => 'login-4',
|
||||
:updated_by_id => 1,
|
||||
:created_by_id => 1,
|
||||
},
|
||||
:create_verify => {
|
||||
:firstname => 'Bob',
|
||||
:lastname => 'Smith',
|
||||
:image => 'none',
|
||||
:image_md5 => '76fdc28c07e4f3d7802b75aacfccdf6a',
|
||||
:email => 'bob.smith@example.com',
|
||||
:login => 'login-4',
|
||||
},
|
||||
:update => {
|
||||
:email => 'unit-test1@znuny.com',
|
||||
},
|
||||
:update_verify => {
|
||||
:firstname => 'Bob',
|
||||
:lastname => 'Smith',
|
||||
:image => '9f19a507f4574b8455543408a7ef2257',
|
||||
:image_md5 => '9f19a507f4574b8455543408a7ef2257',
|
||||
:email => 'unit-test1@znuny.com',
|
||||
:login => 'login-4',
|
||||
}
|
||||
},
|
||||
{
|
||||
:name => '#9 - update create with avatar check',
|
||||
:create => {
|
||||
:firstname => 'Bob',
|
||||
:lastname => 'Smith',
|
||||
:email => 'unit-test2@znuny.com',
|
||||
:login => 'login-5',
|
||||
:updated_by_id => 1,
|
||||
:created_by_id => 1,
|
||||
},
|
||||
:create_verify => {
|
||||
:firstname => 'Bob',
|
||||
:lastname => 'Smith',
|
||||
:image => 'fb83638ff260b20555b25173169135dd',
|
||||
:image_md5 => 'fb83638ff260b20555b25173169135dd',
|
||||
:email => 'unit-test2@znuny.com',
|
||||
:login => 'login-5',
|
||||
},
|
||||
:update => {
|
||||
:email => 'unit-test1@znuny.com',
|
||||
},
|
||||
:update_verify => {
|
||||
:firstname => 'Bob',
|
||||
:lastname => 'Smith',
|
||||
:image => '9f19a507f4574b8455543408a7ef2257',
|
||||
:image_md5 => '9f19a507f4574b8455543408a7ef2257',
|
||||
:email => 'unit-test1@znuny.com',
|
||||
:login => 'login-5',
|
||||
}
|
||||
},
|
||||
]
|
||||
|
||||
tests.each { |test|
|
||||
|
||||
# check if user exists
|
||||
user = User.where( :login => test[:create][:login] ).first
|
||||
if user
|
||||
user.destroy
|
||||
end
|
||||
|
||||
user = User.create( test[:create] )
|
||||
|
||||
test[:create_verify].each { |key, value|
|
||||
assert_equal( user[key], value )
|
||||
next if key == :image_md5
|
||||
assert_equal( value, user[key], "create check #{ key } in (#{ test[:name] })" )
|
||||
}
|
||||
if test[:create_verify][:image_md5]
|
||||
file = user.get_image
|
||||
file_md5 = Digest::MD5.hexdigest( file[:content] )
|
||||
assert_equal( test[:create_verify][:image_md5], file_md5, "create avatar md5 check in (#{ test[:name] })" )
|
||||
end
|
||||
if test[:update]
|
||||
user.update_attributes( test[:update] )
|
||||
|
||||
test[:update_verify].each { |key, value|
|
||||
next if key == :image_md5
|
||||
assert_equal( value, user[key], "update check #{ key } in (#{ test[:name] })" )
|
||||
}
|
||||
|
||||
if test[:update_verify][:image_md5]
|
||||
file = user.get_image
|
||||
file_md5 = Digest::MD5.hexdigest( file[:content] )
|
||||
assert_equal( test[:update_verify][:image_md5], file_md5, "update avatar md5 check in (#{ test[:name] })" )
|
||||
end
|
||||
end
|
||||
|
||||
user.destroy
|
||||
}
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue