This commit is contained in:
Seth Call 2014-08-19 14:23:41 -05:00
parent 8f49a9ab66
commit 9c4ab6418c
9 changed files with 113 additions and 46 deletions

View File

@ -493,7 +493,7 @@ module JamRuby
# retrieve users that have approved RSVPs
def approved_rsvps
User.find_by_sql(%Q{select distinct ON(u.id) u.id, u.photo_url, u.first_name, u.last_name, json_agg(ii.id) as instrument_ids, json_agg(ii.description) as instrument_descriptions, json_agg(rs.proficiency_level) as instrument_proficiencies, json_agg(rr.id) as rsvp_request_ids
User.find_by_sql(%Q{select distinct ON(u.id) u.id, u.photo_url, u.first_name, u.last_name, u.last_jam_audio_latency, json_agg(ii.id) as instrument_ids, json_agg(ii.description) as instrument_descriptions, json_agg(rs.proficiency_level) as instrument_proficiencies, json_agg(rr.id) as rsvp_request_ids
from rsvp_slots rs
inner join rsvp_requests_rsvp_slots rrrs on rrrs.rsvp_slot_id = rs.id
inner join rsvp_requests rr on rrrs.rsvp_request_id = rr.id

View File

@ -11,7 +11,7 @@
context.JK.HelpBubbleHelper = helpBubble;
var logger = context.JK.logger;
var defaultScoreBreakDownOptions = {positions: ['right', 'top', 'bottom', 'left'], width:'600px' };
var defaultScoreBreakDownOptions = {positions: ['right', 'top', 'bottom', 'left'], width:'600px', closeWhenOthersOpen: true };
helpBubble.scoreBreakdown = function($element, isCurrentUser, full_score, myAudioLatency, otherAudioLatency, internetScore, options) {
options = options || {};
options = $.extend({}, defaultScoreBreakDownOptions, options)

View File

@ -86,7 +86,7 @@
latencyDescription = LATENCY.MEDIUM.description;
latencyStyle = LATENCY.MEDIUM.style;
}
else if (latency > LATENCY.POOR.min && latency <= LATENCY.UNACCEPTABLE.max) {
else if (latency > LATENCY.POOR.min && latency <= LATENCY.POOR.max) {
latencyDescription = LATENCY.POOR.description;
latencyStyle = LATENCY.POOR.style;
}

View File

@ -110,6 +110,10 @@
options = {}
}
$element.on('remove', function() {
$element.btOff();
})
var helpText = context._.template($('#template-help-' + templateName).html(), data, { variable: 'data' });
var holder = $('<div class="hover-bubble help-bubble"></div>');

View File

@ -12,4 +12,9 @@ module ScoreHelper
user = @user_scores[user_id] || {}
{ full_score: user[:full_score], audio_latency: user[:audio_latency], internet_score: user[:internet_score] }
end
def last_jam_audio_latency(user)
user.last_jam_audio_latency ? user.last_jam_audio_latency.round : nil
end
end

View File

@ -93,9 +93,9 @@ else
attributes :id, :sender_id, :receiver_id
node do |invitation|
{
receiver_avatar_url: invitation.receiver.resolved_photo_url
}.merge(user_score(invitation.receiver.id))
user_score(invitation.receiver.id).merge({
receiver_avatar_url: invitation.receiver.resolved_photo_url, audio_latency: last_jam_audio_latency(invitation.receiver)
})
end
}
@ -103,10 +103,11 @@ else
attributes :id, :photo_url, :first_name, :last_name, :name, :resolved_photo_url, :rsvp_request_id
node do |user|
{
user_score(user.id).merge({
instrument_list: process_approved_rsvps(user),
rsvp_request_id: JSON.parse(user.rsvp_request_ids)[0] # there must always be a rsvp_request_id; and they should all be the same
}.merge(user_score(user.id))
rsvp_request_id: JSON.parse(user.rsvp_request_ids)[0], # there must always be a rsvp_request_id; and they should all be the same
audio_latency: last_jam_audio_latency(user)
})
end
}
@ -125,7 +126,9 @@ else
attributes :id, :photo_url, :name, :first_name, :last_name
node do |user|
{ name: user.name }.merge(user_score(user.id))
user_score(user.id).merge({
name: user.name,
audio_latency: last_jam_audio_latency(user)})
end
}
}
@ -154,7 +157,13 @@ else
attributes :ip_address, :client_id, :joined_session_at
node :user do |connection|
{ :id => connection.user.id, :photo_url => connection.user.photo_url, :name => connection.user.name, :is_friend => connection.user.friends?(current_user), :connection_state => connection.aasm_state }.merge(user_score(connection.user.id))
user_score(connection.user.id).merge({
:id => connection.user.id,
:photo_url => connection.user.photo_url,
:name => connection.user.name,
:is_friend => connection.user.friends?(current_user),
:connection_state => connection.aasm_state,
audio_latency: last_jam_audio_latency(connection.user)})
end
child(:tracks => :tracks) {

View File

@ -73,44 +73,31 @@ describe "Find Session", :js => true, :type => :feature, :capybara_feature => tr
user.last_jam_locidispid = austin[:locidispid]
user.save!
find('#btn-refresh').trigger(:click)
page.assert_selector('div#sessions-active .found-session', count: 1)
find(".latency-value.latency-unknown[data-user-id='#{session1_creator.id}']", text: 'UNKNOWN')
# create score with viewer and creator
score1, score2 = create_score(austin, dallas, { auserid: user.id, buserid: session1_creator.id},
austin[:jamisp].beginip, dallas[:jamisp].beginip, 'a_client_id', 'b_client_id', score=3) # creates scores with very recent created_at, so it should be skipped
find('#btn-refresh').trigger(:click)
page.assert_selector('div#sessions-active .found-session', count: 1)
find(".latency-value.latency-good[data-user-id='#{session1_creator.id}']", text: 'GOOD')
Score.connection.execute('DELETE FROM scores').check
score1, score2 = create_score(austin, dallas, { auserid: user.id, buserid: session1_creator.id},
austin[:jamisp].beginip, dallas[:jamisp].beginip, 'a_client_id', 'b_client_id', score=40) # creates scores with very recent created_at, so it should be skipped
find('#btn-refresh').trigger(:click)
page.assert_selector('div#sessions-active .found-session', count: 1)
find(".latency-value.latency-fair[data-user-id='#{session1_creator.id}']", text: 'FAIR')
Score.connection.execute('DELETE FROM scores').check
score1, score2 = create_score(austin, dallas, { auserid: user.id, buserid: session1_creator.id},
austin[:jamisp].beginip, dallas[:jamisp].beginip, 'a_client_id', 'b_client_id', score=100) # creates scores with very recent created_at, so it should be skipped
find('#btn-refresh').trigger(:click)
page.assert_selector('div#sessions-active .found-session', count: 1)
find(".latency-value.latency-poor[data-user-id='#{session1_creator.id}']", text: 'POOR')
Score.connection.execute('DELETE FROM scores').check
score1, score2 = create_score(austin, dallas, { auserid: user.id, buserid: session1_creator.id},
austin[:jamisp].beginip, dallas[:jamisp].beginip, 'a_client_id', 'b_client_id', score=200) # creates scores with very recent created_at, so it should be skipped
find('#btn-refresh').trigger(:click)
page.assert_selector('div#sessions-active .found-session', count: 1)
find(".latency-value.latency-unacceptable[data-user-id='#{session1_creator.id}']", text: 'UNACCEPTABLE')
verify_score(nil, '#sessions-active', user, session1_creator)
verify_score(3, '#sessions-active', user, session1_creator)
verify_score(40, '#sessions-active', user, session1_creator)
verify_score(80, '#sessions-active', user, session1_creator)
verify_score(110, '#sessions-active', user, session1_creator)
fast_signout
fast_signin(session1_creator, "/client#/findSession")
page.assert_selector('div#sessions-active .found-session', count: 1)
find(".latency-value.latency-me[data-user-id='#{session1_creator.id}']", text: 'ME')
verify_score(nil, '#sessions-active', session1_creator, session1_creator)
# this should cause it to move to the scheduled session view; we'll check all the values again
ActiveMusicSession.delete_all
verify_score(nil, '#sessions-scheduled', session1_creator, session1_creator)
fast_signout
fast_signin(user, "/client#/findSession")
verify_score(nil, '#sessions-scheduled', user, session1_creator)
verify_score(3, '#sessions-scheduled', user, session1_creator)
verify_score(40, '#sessions-scheduled', user, session1_creator)
verify_score(80, '#sessions-scheduled', user, session1_creator)
verify_score(110, '#sessions-scheduled', user, session1_creator)
end
end

View File

@ -200,4 +200,62 @@ def locidispid_from_ip(ip_address)
else
nil
end
end
def expected_score_info(score, parent_selector, current_user, target_user)
full_score = score ? score + current_user.last_jam_audio_latency + target_user.last_jam_audio_latency : nil
if current_user == target_user
expected = {latency_badge_selector: '.latency-me', latency_badge_text: 'ME'}
elsif full_score == nil
expected = {latency_badge_selector: '.latency-unknown', latency_badge_text: 'UNKNOWN'}
elsif full_score < 40
expected = {latency_badge_selector: '.latency-good', latency_badge_text: 'GOOD'}
elsif full_score < 70
expected = {latency_badge_selector: '.latency-fair', latency_badge_text: 'FAIR'}
elsif full_score < 100
expected = {latency_badge_selector: '.latency-poor', latency_badge_text: 'POOR'}
else
expected = {latency_badge_selector: '.latency-unacceptable', latency_badge_text: 'UNACCEPTABLE'}
end
expected
end
# will verify that the score shown match the score desired
def verify_score(score, parent_selector, current_user, target_user)
expected = expected_score_info(score, parent_selector, current_user, target_user)
Score.connection.execute('DELETE FROM scores').check
if score
create_score(austin, dallas, { auserid: user.id, buserid: session1_creator.id},
austin[:jamisp].beginip, dallas[:jamisp].beginip, 'a_client_id', 'b_client_id', score=score) # creates scores with very recent created_at, so it should be skipped
end
find('#btn-refresh').trigger(:click)
page.assert_selector("div#{parent_selector} .found-session", count: 1)
find(".latency-value#{expected[:latency_badge_selector]}[data-user-id='#{target_user.id}']", text: expected[:latency_badge_text])
verify_score_hover(score, parent_selector, current_user, target_user)
end
def verify_score_hover(score, parent_selector, current_user, target_user)
expected = expected_score_info(score, parent_selector, current_user, target_user)
find(".latency-value#{expected[:latency_badge_selector]}[data-user-id='#{target_user.id}']", text: expected[:latency_badge_text]).help_bubble
if current_user == target_user
find('.help-musician-score-self p', text: 'You are looking at your own account.')
if current_user.last_jam_audio_latency
find('.help-musician-score-self .my-gear-latency .measurement-value', text: "#{current_user.last_jam_audio_latency.round} ms")
else
find('.help-musician-score-self .my-gear-latency .measurement-value', text: "13 ms*")
end
else
find('.help-musician-score-count .my-gear-latency .measurement-value', text: current_user.last_jam_audio_latency ? "#{current_user.last_jam_audio_latency.round} ms" : '13 ms*')
find('.help-musician-score-count .their-gear-latency .measurement-value', text: target_user.last_jam_audio_latency ? "#{target_user.last_jam_audio_latency.round} ms" : '13 ms*')
find('.help-musician-score-count .internet-latency .measurement-value', text: score ? "#{score} ms": '?')
end
end

View File

@ -18,6 +18,10 @@ module Capybara
sleep 0.3
attempt_hover
end
def help_bubble
hover
end
end
end
end