* VRFS-1962, VRFS-2047, VRFS-2046, VRFS-2006 - score breakdown hover and score badges are all tested and working
This commit is contained in:
parent
e3406e7af0
commit
554d100c31
|
|
@ -74,7 +74,7 @@
|
|||
<td style="text-align:center">
|
||||
<span class="latency">
|
||||
<span class="latency-value"><%= (sess.latency / 2).round %> ms</span>
|
||||
<% if sess.latency <= (APP_CONFIG.max_good_full_score * 2) %>
|
||||
<% if sess.latency <= (APP_CONFIG.max_good_full_score) %>
|
||||
<%= image_tag("http://www.jamkazam.com/assets/content/icon_green_score.png", alt: 'good score icon') %>
|
||||
<% else %>
|
||||
<%= image_tag("http://www.jamkazam.com/assets/content/icon_yellow_score.png", alt: 'fair score icon') %>
|
||||
|
|
|
|||
|
|
@ -225,8 +225,8 @@ module JamRuby
|
|||
rel = rel.where(['current_scores.full_score > ?', score_min]) unless score_min.nil?
|
||||
rel = rel.where(['current_scores.full_score <= ?', score_max]) unless score_max.nil?
|
||||
|
||||
rel = rel.select('current_scores.full_score, current_scores.score, round(current_scores.a_audio_latency) as audio_latency, regions.regionname')
|
||||
rel = rel.group('current_scores.full_score, current_scores.score, current_scores.a_audio_latency, regions.regionname')
|
||||
rel = rel.select('current_scores.full_score, current_scores.score, regions.regionname')
|
||||
rel = rel.group('current_scores.full_score, current_scores.score, regions.regionname')
|
||||
end
|
||||
|
||||
ordering = self.order_param(params)
|
||||
|
|
|
|||
|
|
@ -111,15 +111,15 @@ def app_config
|
|||
end
|
||||
|
||||
def max_good_full_score
|
||||
20
|
||||
40
|
||||
end
|
||||
|
||||
def max_yellow_full_score
|
||||
35
|
||||
70
|
||||
end
|
||||
|
||||
def max_red_full_score
|
||||
50
|
||||
100
|
||||
end
|
||||
|
||||
private
|
||||
|
|
|
|||
|
|
@ -138,14 +138,18 @@
|
|||
.done(function(rsvpResponse) {
|
||||
rsvpData = rsvpResponse;
|
||||
|
||||
renderSession();
|
||||
|
||||
app.user()
|
||||
.done(function(userMe) {
|
||||
renderSession(userMe);
|
||||
})
|
||||
})
|
||||
.fail(app.ajaxError);
|
||||
})
|
||||
.fail(app.ajaxError);
|
||||
}
|
||||
|
||||
function renderSession() {
|
||||
function renderSession(userMe) {
|
||||
var hasPending = false;
|
||||
var isOwner = false;
|
||||
if (sessionData.user_id == context.JK.currentUserId) {
|
||||
|
|
@ -211,12 +215,9 @@
|
|||
var audio_latency = $latencyBadge.attr('data-audio-latency') || null;
|
||||
var latencyBadgeUserId = $latencyBadge.attr('data-user-id');
|
||||
var scoreOptions = {offsetParent: $offsetParent};
|
||||
app.user()
|
||||
.done(function(userMe) {
|
||||
helpBubble.scoreBreakdown($latencyBadge, context.JK.currentUserId == latencyBadgeUserId, full_score, userMe.last_jam_audio_latency, audio_latency, internet_score, scoreOptions);
|
||||
})
|
||||
});
|
||||
helpBubble.scoreBreakdown($latencyBadge, context.JK.currentUserId == latencyBadgeUserId, full_score, userMe.last_jam_audio_latency, audio_latency, internet_score, scoreOptions);
|
||||
|
||||
});
|
||||
|
||||
$sessionDetail.html($template);
|
||||
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@
|
|||
var textMessageDialog = null;
|
||||
var $results = null;
|
||||
var helpBubble = context.JK.HelpBubbleHelper;
|
||||
var sessionUtils = context.JK.SessionUtils;
|
||||
|
||||
function loadMusicians(queryString) {
|
||||
// squelch nulls and undefines
|
||||
|
|
@ -86,23 +87,6 @@
|
|||
return Math.round(score / 2) + " ms";
|
||||
}
|
||||
|
||||
function score_to_color(score) {
|
||||
// these are raw scores as reported by client (round trip times)
|
||||
if (score == null) return "purple";
|
||||
if (0 < score && score <= 40) return "green";
|
||||
if (40 < score && score <= 70) return "yellow";
|
||||
if (70 < score && score <= 100) return "red";
|
||||
return "blue";
|
||||
}
|
||||
|
||||
function score_to_color_alt(score) {
|
||||
// these are raw scores as reported by client (round trip times)
|
||||
if (score == null) return "missing";
|
||||
if (0 < score && score <= 40) return "good";
|
||||
if (40 < score && score <= 70) return "moderate";
|
||||
if (70 < score && score <= 100) return "poor";
|
||||
return "unacceptable";
|
||||
}
|
||||
|
||||
function formatLocation(musician) {
|
||||
if(musician.city && musician.state) {
|
||||
|
|
@ -168,6 +152,8 @@
|
|||
var musician_actions = context.JK.fillTemplate(aTemplate, actionVals);
|
||||
|
||||
var full_score = musician['full_score'];
|
||||
|
||||
var scoreInfo = sessionUtils.scoreInfo(full_score, false)
|
||||
mVals = {
|
||||
avatar_url: context.JK.resolveAvatarUrl(musician.photo_url),
|
||||
profile_url: "/client#/profile/" + musician.id,
|
||||
|
|
@ -183,9 +169,9 @@
|
|||
musician_follow_template: follows,
|
||||
musician_action_template: musician_actions,
|
||||
musician_one_way_score: score_to_text(full_score),
|
||||
musician_score_color: score_to_color(full_score),
|
||||
musician_score_color_alt: score_to_color_alt(full_score)
|
||||
|
||||
musician_score_color: scoreInfo.icon_name,
|
||||
musician_score_color_alt: scoreInfo.description,
|
||||
latency_style: scoreInfo.latency_style
|
||||
};
|
||||
var $rendering = $(context.JK.fillTemplate(mTemplate, mVals))
|
||||
|
||||
|
|
|
|||
|
|
@ -12,7 +12,8 @@
|
|||
var logger = context.JK.logger;
|
||||
|
||||
|
||||
var LATENCY = {
|
||||
|
||||
var LATENCY = sessionUtils.LATENCY = {
|
||||
ME : {description: "ME", style: "latency-me", min: -1, max: -1},
|
||||
GOOD : {description: "GOOD", style: "latency-good", min: 0.0, max: 40.0},
|
||||
MEDIUM : {description: "FAIR", style: "latency-fair", min: 40.0, max: 70.0},
|
||||
|
|
@ -62,44 +63,58 @@
|
|||
}
|
||||
}
|
||||
|
||||
sessionUtils.createLatency = function(user) {
|
||||
|
||||
var latencyStyle;
|
||||
sessionUtils.scoreInfo = function(full_score, isSameUser) {
|
||||
var latencyDescription;
|
||||
var latencyStyle;
|
||||
var iconName;
|
||||
var description;
|
||||
|
||||
if (user.id === context.JK.currentUserId) {
|
||||
latencyStyle = LATENCY.ME.style, latencyDescription = LATENCY.ME.description;
|
||||
if(isSameUser) {
|
||||
latencyDescription = LATENCY.ME.description;
|
||||
latencyStyle = LATENCY.ME.style;
|
||||
iconName = 'purple';
|
||||
description = 'me';
|
||||
}
|
||||
else if (!full_score) {
|
||||
latencyDescription = LATENCY.UNKNOWN.description;
|
||||
latencyStyle = LATENCY.UNKNOWN.style;
|
||||
iconName = 'purple'
|
||||
description = 'missing'
|
||||
}
|
||||
else if (full_score <= LATENCY.GOOD.max) {
|
||||
latencyDescription = LATENCY.GOOD.description;
|
||||
latencyStyle = LATENCY.GOOD.style;
|
||||
iconName = 'green'
|
||||
description = 'good'
|
||||
}
|
||||
else if (full_score <= LATENCY.MEDIUM.max) {
|
||||
latencyDescription = LATENCY.MEDIUM.description;
|
||||
latencyStyle = LATENCY.MEDIUM.style;
|
||||
iconName = 'yellow';
|
||||
description = 'fair'
|
||||
}
|
||||
else if (full_score <= LATENCY.POOR.max) {
|
||||
latencyDescription = LATENCY.POOR.description;
|
||||
latencyStyle = LATENCY.POOR.style;
|
||||
iconName = 'red'
|
||||
description = 'poor'
|
||||
}
|
||||
|
||||
else {
|
||||
var latency = user.full_score;
|
||||
|
||||
if (!latency) {
|
||||
latencyDescription = LATENCY.UNKNOWN.description;
|
||||
latencyStyle = LATENCY.UNKNOWN.style;
|
||||
}
|
||||
else if (latency <= LATENCY.GOOD.max) {
|
||||
latencyDescription = LATENCY.GOOD.description;
|
||||
latencyStyle = LATENCY.GOOD.style;
|
||||
}
|
||||
else if (latency > LATENCY.MEDIUM.min && latency <= LATENCY.MEDIUM.max) {
|
||||
latencyDescription = LATENCY.MEDIUM.description;
|
||||
latencyStyle = LATENCY.MEDIUM.style;
|
||||
}
|
||||
else if (latency > LATENCY.POOR.min && latency <= LATENCY.POOR.max) {
|
||||
latencyDescription = LATENCY.POOR.description;
|
||||
latencyStyle = LATENCY.POOR.style;
|
||||
}
|
||||
else {
|
||||
latencyStyle = LATENCY.UNACCEPTABLE.style
|
||||
latencyDescription = LATENCY.UNACCEPTABLE.description
|
||||
}
|
||||
latencyStyle = LATENCY.UNACCEPTABLE.style;
|
||||
latencyDescription = LATENCY.UNACCEPTABLE.description;
|
||||
iconName = 'blue'
|
||||
description = 'unacceptable'
|
||||
}
|
||||
|
||||
return {
|
||||
latency_style: latencyStyle,
|
||||
latency_text: latencyDescription
|
||||
latency_text: latencyDescription,
|
||||
icon_name: iconName,
|
||||
description: description
|
||||
};
|
||||
}
|
||||
sessionUtils.createLatency = function(user) {
|
||||
return sessionUtils.scoreInfo(user.full_score, user.id === context.JK.currentUserId)
|
||||
}
|
||||
|
||||
})(window, jQuery);
|
||||
|
|
@ -1,6 +1,71 @@
|
|||
@import "client/common";
|
||||
|
||||
|
||||
table.findsession-table, table.local-recordings, #account-session-detail {
|
||||
|
||||
|
||||
|
||||
.latency-unacceptable {
|
||||
width: 50px;
|
||||
height: 10px;
|
||||
font-family:Arial, Helvetica, sans-serif;
|
||||
font-weight:200;
|
||||
font-size:11px;
|
||||
background-color:$latencyBadgeUnacceptable;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
.latency-unknown {
|
||||
width: 50px;
|
||||
height: 10px;
|
||||
font-family:Arial, Helvetica, sans-serif;
|
||||
font-weight:200;
|
||||
font-size:11px;
|
||||
background-color:$latencyBadgeUnacceptable;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
.latency-good {
|
||||
width: 50px;
|
||||
height: 10px;
|
||||
font-family:Arial, Helvetica, sans-serif;
|
||||
font-weight:200;
|
||||
font-size:11px;
|
||||
background-color:$latencyBadgeGood;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
.latency-me {
|
||||
width: 50px;
|
||||
height: 10px;
|
||||
font-family:Arial, Helvetica, sans-serif;
|
||||
font-weight:200;
|
||||
font-size:11px;
|
||||
text-align:center;
|
||||
background-color:$latencyBadgeMe;
|
||||
color:black;
|
||||
}
|
||||
|
||||
.latency-fair {
|
||||
width: 50px;
|
||||
height: 10px;
|
||||
font-family:Arial, Helvetica, sans-serif;
|
||||
font-weight:200;
|
||||
font-size:11px;
|
||||
background-color:$latencyBadgeFair;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
.latency-poor{
|
||||
width: 40px;
|
||||
height: 10px;
|
||||
font-family:Arial, Helvetica, sans-serif;
|
||||
font-weight:200;
|
||||
font-size:11px;
|
||||
background-color:$latencyBadgePoor;
|
||||
text-align:center;
|
||||
}
|
||||
}
|
||||
table.findsession-table, table.local-recordings {
|
||||
width:98%;
|
||||
height:10%;
|
||||
|
|
@ -81,67 +146,6 @@ table.findsession-table, table.local-recordings {
|
|||
}
|
||||
|
||||
|
||||
.latency-unacceptable {
|
||||
width: 50px;
|
||||
height: 10px;
|
||||
font-family:Arial, Helvetica, sans-serif;
|
||||
font-weight:200;
|
||||
font-size:11px;
|
||||
background-color:$latencyBadgeUnacceptable;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
.latency-unknown {
|
||||
width: 50px;
|
||||
height: 10px;
|
||||
font-family:Arial, Helvetica, sans-serif;
|
||||
font-weight:200;
|
||||
font-size:11px;
|
||||
background-color:$latencyBadgeUnacceptable;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
.latency-good {
|
||||
width: 50px;
|
||||
height: 10px;
|
||||
font-family:Arial, Helvetica, sans-serif;
|
||||
font-weight:200;
|
||||
font-size:11px;
|
||||
background-color:$latencyBadgeGood;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
.latency-me {
|
||||
width: 50px;
|
||||
height: 10px;
|
||||
font-family:Arial, Helvetica, sans-serif;
|
||||
font-weight:200;
|
||||
font-size:11px;
|
||||
text-align:center;
|
||||
background-color:$latencyBadgeMe;
|
||||
color:black;
|
||||
}
|
||||
|
||||
.latency-fair {
|
||||
width: 50px;
|
||||
height: 10px;
|
||||
font-family:Arial, Helvetica, sans-serif;
|
||||
font-weight:200;
|
||||
font-size:11px;
|
||||
background-color:$latencyBadgeFair;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
.latency-poor{
|
||||
width: 40px;
|
||||
height: 10px;
|
||||
font-family:Arial, Helvetica, sans-serif;
|
||||
font-weight:200;
|
||||
font-size:11px;
|
||||
background-color:$latencyBadgePoor;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
.avatar-tiny {
|
||||
float:left;
|
||||
padding:1px;
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ if @search.musicians_filter_search?
|
|||
end
|
||||
|
||||
child(:results => :musicians) {
|
||||
attributes :id, :first_name, :last_name, :name, :city, :state, :country, :email, :online, :musician, :photo_url, :biography, :regionname, :score, :full_score, :audio_latency
|
||||
attributes :id, :first_name, :last_name, :name, :city, :state, :country, :email, :online, :musician, :photo_url, :biography, :regionname, :score, :full_score
|
||||
|
||||
node :is_friend do |musician|
|
||||
@search.is_friend?(musician)
|
||||
|
|
@ -79,6 +79,10 @@ if @search.musicians_filter_search?
|
|||
node :friend_count do |musician| @search.friend_count(musician) end
|
||||
node :recording_count do |musician| @search.record_count(musician) end
|
||||
node :session_count do |musician| @search.session_count(musician) end
|
||||
|
||||
node :audio_latency do |musician|
|
||||
last_jam_audio_latency(musician)
|
||||
end
|
||||
}
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -62,9 +62,9 @@
|
|||
<div class="help-musician-score-count">
|
||||
<p>The score shown is the one-way latency (or delay) in milliseconds from you to this user. This score is calculated using the following three values that JamKazam gathers:</p>
|
||||
<ul>
|
||||
<li><span class="definition">Your Audio Gear Latency:</span> <span class="measurement my-gear-latency"><span class="measurement-value">{{data.my_gear_latency ? data.my_gear_latency + ' ms': '13 ms*'}}</span> <span class="measurement-absent">{{data.my_gear_latency ? '' : "(you have not qualified any gear, so we picked an average gear latency)"}}</span></span></li>
|
||||
<li><span class="definition">Their Audio Gear Latency:</span> <span class="measurement their-gear-latency"><span class="measurement-value">{{data.their_gear_latency ? data.their_gear_latency + ' ms': '13 ms*'}}</span> <span class="measurement-absent">{{data.their_gear_latency ? '' : "(they have not qualified any gear, so we picked an average gear latency)"}}</span></span></li>
|
||||
<li><span class="definition">Round-trip Internet Latency:</span> <span class="measurement internet-latency"><span class="measurement-value">{{data.internet_latency ? data.internet_latency + ' ms': '?'}}</span> <span class="measurement-absent">{{data.internet_latency ? '' : "(we have not scored you with this user yet)"}}</span></span></li>
|
||||
<li><span class="definition">Your Audio Gear Latency:</span> <span class="measurement my-gear-latency partial"><span class="measurement-value">{{data.my_gear_latency ? data.my_gear_latency + ' ms': '13 ms*'}}</span> <span class="measurement-absent">{{data.my_gear_latency ? '' : "(you have not qualified any gear, so we picked an average gear latency)"}}</span></span></li>
|
||||
<li><span class="definition">Their Audio Gear Latency:</span> <span class="measurement their-gear-latency partial"><span class="measurement-value">{{data.their_gear_latency ? data.their_gear_latency + ' ms': '13 ms*'}}</span> <span class="measurement-absent">{{data.their_gear_latency ? '' : "(they have not qualified any gear, so we picked an average gear latency)"}}</span></span></li>
|
||||
<li><span class="definition">Round-trip Internet Latency:</span> <span class="measurement internet-latency partial"><span class="measurement-value">{{data.internet_latency ? data.internet_latency + ' ms': '?'}}</span> <span class="measurement-absent">{{data.internet_latency ? '' : "(we have not scored you with this user yet)"}}</span></span></li>
|
||||
</ul>
|
||||
<p> <span class="definition">Total One-Way Latency:</span> <span class="measurement my-gear-latency"><span class="measurement-value">( {{data.my_gear_latency ? data.my_gear_latency: '13'}} + {{data.their_gear_latency ? data.their_gear_latency: '13'}} + {{data.internet_latency ? data.internet_latency: '?'}} ) / 2 = {{data.full_score ? data.full_score + ' ms' : "?"}}</span> <span class="measurement-absent">{{data.full_score ? '' : "(when we don't know internet latency, we don't try to guess your one-way latency)"}}</span></span>
|
||||
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@
|
|||
|
||||
<!-- Session Row Template -->
|
||||
<script type="text/template" id="template-find-musician-row">
|
||||
<div class="profile-band-list-result musician-list-result">
|
||||
<div class="profile-band-list-result musician-list-result" data-musician-id={musician_id}>
|
||||
<div class="f11" data-hint="container">
|
||||
<div class="left" style="width:63px;margin-top:-12px;">
|
||||
<!-- avatar -->
|
||||
|
|
@ -53,7 +53,7 @@
|
|||
<span class="follower-count">{follow_count} <img src="../assets/content/icon_followers.png" alt="follows" width="22" height="12" align="absmiddle" style="margin-right:4px;"/></span>
|
||||
<span class="recording-count">{recording_count} <img src="../assets/content/icon_recordings.png" alt="recordings" width="12" height="13" align="absmiddle" style="margin-right:4px;"/></span>
|
||||
<span class="session-count">{session_count} <img src="../assets/content/icon_session_tiny.png" alt="sessions" width="12" height="12" align="absmiddle" style="margin-right:4px;"/></span>
|
||||
<span class="score-count">{musician_one_way_score} <img src="../assets/content/icon_{musician_score_color}_score.png" alt="{musician_score_color_alt} score" width="12" height="12" align="absmiddle" style="margin-right:4px;"/></span>
|
||||
<span class="score-count {latency_style}">{musician_one_way_score} <img src="../assets/content/icon_{musician_score_color}_score.png" alt="{musician_score_color_alt} score" width="12" height="12" align="absmiddle" style="margin-right:4px;"/></span>
|
||||
</div>
|
||||
<div class="result-list-button-wrapper" data-musician-id={musician_id}>
|
||||
{musician_action_template}
|
||||
|
|
|
|||
|
|
@ -257,9 +257,9 @@ if defined?(Bundler)
|
|||
config.max_track_part_upload_failures = 3
|
||||
|
||||
# scoring thresholds for 'full score', which is 1/2 your gear + 1/2 their gear + and 1/2 ping time
|
||||
config.max_good_full_score = 20
|
||||
config.max_yellow_full_score = 35
|
||||
config.max_red_full_score = 50
|
||||
config.max_good_full_score = 40
|
||||
config.max_yellow_full_score = 70
|
||||
config.max_red_full_score = 100
|
||||
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@ describe "Find Session", :js => true, :type => :feature, :capybara_feature => tr
|
|||
|
||||
let(:austin) { austin_geoip }
|
||||
let(:dallas) { dallas_geoip }
|
||||
|
||||
let(:user) { FactoryGirl.create(:user, last_jam_locidispid: austin_geoip[:locidispid], last_jam_addr: austin_ip) }
|
||||
let(:finder) { FactoryGirl.create(:user, last_jam_locidispid: dallas_geoip[:locidispid], last_jam_addr: dallas_ip) }
|
||||
|
||||
|
|
@ -70,33 +69,30 @@ describe "Find Session", :js => true, :type => :feature, :capybara_feature => tr
|
|||
|
||||
it "shows latency information correctly" do
|
||||
# this will try to show all 6 latency badges. unknown, good, fair, poor, unacceptable, and me
|
||||
user.last_jam_locidispid = austin[:locidispid]
|
||||
user.save!
|
||||
|
||||
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)
|
||||
verify_find_session_score(nil, '#sessions-active', user, session1_creator)
|
||||
verify_find_session_score(3, '#sessions-active', user, session1_creator)
|
||||
verify_find_session_score(40, '#sessions-active', user, session1_creator)
|
||||
verify_find_session_score(80, '#sessions-active', user, session1_creator)
|
||||
verify_find_session_score(110, '#sessions-active', user, session1_creator)
|
||||
|
||||
fast_signout
|
||||
fast_signin(session1_creator, "/client#/findSession")
|
||||
|
||||
verify_score(nil, '#sessions-active', session1_creator, session1_creator)
|
||||
verify_find_session_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)
|
||||
verify_find_session_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)
|
||||
verify_find_session_score(nil, '#sessions-scheduled', user, session1_creator)
|
||||
verify_find_session_score(3, '#sessions-scheduled', user, session1_creator)
|
||||
verify_find_session_score(40, '#sessions-scheduled', user, session1_creator)
|
||||
verify_find_session_score(80, '#sessions-scheduled', user, session1_creator)
|
||||
verify_find_session_score(110, '#sessions-scheduled', user, session1_creator)
|
||||
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -4,19 +4,19 @@ describe "Musician Search", :js => true, :type => :feature, :capybara_feature =>
|
|||
|
||||
subject { page }
|
||||
|
||||
before(:all) do
|
||||
poltergeist_setup
|
||||
end
|
||||
let(:austin) { austin_geoip }
|
||||
let(:dallas) { dallas_geoip }
|
||||
let(:user) {FactoryGirl.create(:user, last_jam_locidispid: austin_geoip[:locidispid], last_jam_addr: austin_ip)}
|
||||
let(:user2) {FactoryGirl.create(:user, last_jam_locidispid: dallas_geoip[:locidispid], last_jam_addr: dallas_ip)}
|
||||
|
||||
|
||||
before(:each) do
|
||||
@user = FactoryGirl.create(:user, last_jam_locidispid: 1)
|
||||
@user2 = FactoryGirl.create(:user, last_jam_locidispid: 1)
|
||||
|
||||
MaxMindManager.create_phony_database
|
||||
Score.delete_all
|
||||
Score.createx(1, 'a', 1, 1, 'a', 1, 10)
|
||||
Score.createx(austin_geoip[:locidispid], 'a', 1, dallas_geoip[:locidispid], 'a', 1, 10)
|
||||
|
||||
ActiveRecord::Base.logger.debug '====================================== begin ======================================'
|
||||
sign_in_poltergeist @user
|
||||
sign_in_poltergeist user
|
||||
visit "/client#/musicians"
|
||||
end
|
||||
|
||||
|
|
@ -47,4 +47,15 @@ describe "Musician Search", :js => true, :type => :feature, :capybara_feature =>
|
|||
expect(page).to_not have_selector('#musician-filter-results .musician-list-result')
|
||||
end
|
||||
|
||||
it "shows latency information correctly" do
|
||||
# this will try to show 5 latency badges. unknown, good, fair, poor, unacceptable. 'me' does not happen on this screen
|
||||
user.last_jam_locidispid = austin[:locidispid]
|
||||
user.save!
|
||||
|
||||
verify_find_musician_score(nil, user, user2)
|
||||
verify_find_musician_score(3, user, user2)
|
||||
verify_find_musician_score(40, user, user2)
|
||||
verify_find_musician_score(80, user, user2)
|
||||
verify_find_musician_score(110, user, user2)
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -3,7 +3,9 @@ require 'spec_helper'
|
|||
describe "Session Detail", :js => true, :type => :feature, :capybara_feature => true do
|
||||
|
||||
|
||||
let(:searcher) { FactoryGirl.create(:user) }
|
||||
let(:austin) { austin_geoip }
|
||||
let(:dallas) { dallas_geoip }
|
||||
let(:searcher) { FactoryGirl.create(:user, last_jam_locidispid: austin_geoip[:locidispid], last_jam_addr: austin_ip) }
|
||||
let(:requested_rsvp_slot) {FactoryGirl.create(:requested_rsvp_slot, user: searcher)}
|
||||
|
||||
before(:each) do
|
||||
|
|
@ -64,4 +66,24 @@ describe "Session Detail", :js => true, :type => :feature, :capybara_feature =>
|
|||
find('a#btnCancelRsvp').trigger(:click)
|
||||
should_not have_selector('td', text: searcher.name)
|
||||
end
|
||||
|
||||
it "shows latency information correctly" do
|
||||
# this will try to show all 6 latency badges. unknown, good, fair, poor, unacceptable, and me
|
||||
session_creator = requested_rsvp_slot.music_session.creator
|
||||
session_creator.last_jam_locidispid = dallas_geoip[:locidispid]
|
||||
session_creator.last_jam_addr = dallas_ip
|
||||
session_creator.save!
|
||||
|
||||
fast_signin(session_creator, Nav.session_detail(requested_rsvp_slot.music_session))
|
||||
find('h2', text: 'RSVPs')
|
||||
|
||||
|
||||
target_path = Nav.session_detail(requested_rsvp_slot.music_session)
|
||||
verify_session_detail_score(nil, session_creator, searcher, target_path)
|
||||
verify_session_detail_score(nil, session_creator, session_creator, target_path)
|
||||
verify_session_detail_score(3, session_creator, searcher, target_path)
|
||||
verify_session_detail_score(40, session_creator, searcher, target_path)
|
||||
verify_session_detail_score(80, session_creator, searcher, target_path)
|
||||
verify_session_detail_score(110, session_creator, searcher, target_path)
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -2,6 +2,10 @@ require 'spec_helper'
|
|||
|
||||
describe "Session Info", :js => true, :type => :feature, :capybara_feature => true do
|
||||
|
||||
|
||||
let(:austin) { austin_geoip }
|
||||
let(:dallas) { dallas_geoip }
|
||||
|
||||
before(:each) do
|
||||
SessionInfoComment.delete_all
|
||||
Notification.delete_all
|
||||
|
|
@ -11,20 +15,21 @@ describe "Session Info", :js => true, :type => :feature, :capybara_feature => tr
|
|||
Invitation.delete_all
|
||||
MusicSession.delete_all
|
||||
User.delete_all
|
||||
MaxMindManager.create_phony_database
|
||||
|
||||
@rsvp_approved_user = FactoryGirl.create(:user)
|
||||
@rsvp_approved_user = FactoryGirl.create(:user, last_jam_locidispid: dallas_geoip[:locidispid], last_jam_addr: dallas_ip)
|
||||
@rsvp_approved_user.save
|
||||
|
||||
@rsvp_declined_user = FactoryGirl.create(:user)
|
||||
@rsvp_declined_user = FactoryGirl.create(:user, last_jam_locidispid: dallas_geoip[:locidispid], last_jam_addr: dallas_ip)
|
||||
@rsvp_declined_user.save
|
||||
|
||||
@session_invitee = FactoryGirl.create(:user)
|
||||
@session_invitee = FactoryGirl.create(:user, last_jam_locidispid: dallas_geoip[:locidispid], last_jam_addr: dallas_ip)
|
||||
@session_invitee.save
|
||||
|
||||
@non_session_invitee = FactoryGirl.create(:user)
|
||||
@non_session_invitee = FactoryGirl.create(:user, ;)
|
||||
@non_session_invitee.save
|
||||
|
||||
@session_creator = FactoryGirl.create(:user)
|
||||
@session_creator = FactoryGirl.create(:user, last_jam_locidispid: austin_geoip[:locidispid], last_jam_addr: austin_ip)
|
||||
@session_creator.save
|
||||
|
||||
# session invitations require sender and receiver to be friends
|
||||
|
|
@ -42,19 +47,13 @@ describe "Session Info", :js => true, :type => :feature, :capybara_feature => tr
|
|||
@url = "/sessions/#{@music_session.id}/details"
|
||||
|
||||
@slot1 = FactoryGirl.create(:rsvp_slot, :music_session => @music_session, :instrument => JamRuby::Instrument.find('electric guitar'))
|
||||
|
||||
@slot2 = FactoryGirl.create(:rsvp_slot, :music_session => @music_session, :instrument => JamRuby::Instrument.find('drums'))
|
||||
|
||||
@invitation = FactoryGirl.create(:invitation, :sender => @session_creator, :receiver => @session_invitee, :music_session => @music_session)
|
||||
|
||||
@invitation = FactoryGirl.create(:invitation, :sender => @session_creator, :receiver => @rsvp_approved_user, :music_session => @music_session)
|
||||
|
||||
@invitation = FactoryGirl.create(:invitation, :sender => @session_creator, :receiver => @rsvp_declined_user, :music_session => @music_session)
|
||||
|
||||
# create RSVP request 1
|
||||
@rsvp1 = RsvpRequest.create({:session_id => @music_session.id, :rsvp_slots => [@slot1.id, @slot2.id], :message => "Let's Jam!"}, @rsvp_approved_user)
|
||||
|
||||
# create RSVP request 2
|
||||
@rsvp2 = RsvpRequest.create({:session_id => @music_session.id, :rsvp_slots => [@slot1.id, @slot2.id], :message => "Let's Jam!"}, @rsvp_declined_user)
|
||||
|
||||
# approve slot1
|
||||
|
|
@ -205,6 +204,18 @@ describe "Session Info", :js => true, :type => :feature, :capybara_feature => tr
|
|||
fast_signout
|
||||
end
|
||||
|
||||
it "shows latency information correctly" do
|
||||
# this will try to show all 6 latency badges. unknown, good, fair, poor, unacceptable, and me
|
||||
|
||||
fast_signin(@session_creator, @url)
|
||||
verify_session_info_score(nil, @session_creator, @session_creator)
|
||||
verify_session_info_score(nil, @session_creator, @rsvp_approved_user)
|
||||
verify_session_info_score(3, @session_creator, @rsvp_approved_user)
|
||||
verify_session_info_score(40, @session_creator, @rsvp_approved_user)
|
||||
verify_session_info_score(80, @session_creator, @rsvp_approved_user)
|
||||
verify_session_info_score(110, @session_creator, @rsvp_approved_user)
|
||||
end
|
||||
|
||||
# musician_access = true, approval_required = false
|
||||
it "should allow anyone to view for 'at will' option after session starts" do
|
||||
@music_session.musician_access = true
|
||||
|
|
|
|||
|
|
@ -60,15 +60,15 @@ def web_config
|
|||
end
|
||||
|
||||
def max_good_full_score
|
||||
20
|
||||
40
|
||||
end
|
||||
|
||||
def max_yellow_full_score
|
||||
35
|
||||
70
|
||||
end
|
||||
|
||||
def max_red_full_score
|
||||
50
|
||||
100
|
||||
end
|
||||
end
|
||||
klass.new
|
||||
|
|
|
|||
|
|
@ -202,46 +202,99 @@ def locidispid_from_ip(ip_address)
|
|||
end
|
||||
end
|
||||
|
||||
def expected_score_info(score, parent_selector, current_user, target_user)
|
||||
def expected_score_info(score, 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'}
|
||||
expected = {latency_badge_selector: '.latency-me', latency_badge_text: 'ME', color: nil}
|
||||
elsif full_score == nil
|
||||
expected = {latency_badge_selector: '.latency-unknown', latency_badge_text: 'UNKNOWN'}
|
||||
expected = {latency_badge_selector: '.latency-unknown', latency_badge_text: 'UNKNOWN', color: 'purple'}
|
||||
elsif full_score < 40
|
||||
expected = {latency_badge_selector: '.latency-good', latency_badge_text: 'GOOD'}
|
||||
expected = {latency_badge_selector: '.latency-good', latency_badge_text: 'GOOD', color: 'green'}
|
||||
elsif full_score < 70
|
||||
expected = {latency_badge_selector: '.latency-fair', latency_badge_text: 'FAIR'}
|
||||
expected = {latency_badge_selector: '.latency-fair', latency_badge_text: 'FAIR', color: 'yellow'}
|
||||
elsif full_score < 100
|
||||
expected = {latency_badge_selector: '.latency-poor', latency_badge_text: 'POOR'}
|
||||
expected = {latency_badge_selector: '.latency-poor', latency_badge_text: 'POOR', color: 'red'}
|
||||
else
|
||||
expected = {latency_badge_selector: '.latency-unacceptable', latency_badge_text: 'UNACCEPTABLE'}
|
||||
expected = {latency_badge_selector: '.latency-unacceptable', latency_badge_text: 'UNACCEPTABLE', color: 'blue'}
|
||||
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)
|
||||
# will verify that the score shown match the score desired
|
||||
def verify_find_session_score(score, parent_selector, current_user, target_user)
|
||||
|
||||
expected = expected_score_info(score, current_user, target_user)
|
||||
|
||||
Score.connection.execute('DELETE FROM scores').check
|
||||
if score
|
||||
create_score(austin, dallas, { auserid: user.id, buserid: session1_creator.id},
|
||||
create_score(austin, dallas, { auserid: current_user.id, buserid: target_user.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])
|
||||
hoverable = 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)
|
||||
verify_score_hover(score, current_user, target_user, hoverable)
|
||||
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
|
||||
# will verify that the score shown match the score desired
|
||||
def verify_find_musician_score(score, current_user, target_user)
|
||||
|
||||
expected = expected_score_info(score, current_user, target_user)
|
||||
|
||||
Score.connection.execute('DELETE FROM scores').check
|
||||
if score
|
||||
create_score(austin, dallas, { auserid: current_user.id, buserid: target_user.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
|
||||
|
||||
visit '/client#/musicians'
|
||||
hoverable = find(".musician-list-result[data-musician-id='#{target_user.id}'] .score-count#{expected[:latency_badge_selector]} ")
|
||||
hoverable.find('img')['src'].include?("icon_#{expected[:color]}_score.png").should be_true
|
||||
|
||||
verify_score_hover(score, current_user, target_user, hoverable)
|
||||
end
|
||||
|
||||
|
||||
# will verify that the score shown match the score desired
|
||||
def verify_session_info_score(score, current_user, target_user)
|
||||
|
||||
expected = expected_score_info(score, current_user, target_user)
|
||||
|
||||
Score.connection.execute('DELETE FROM scores').check
|
||||
if score
|
||||
create_score(austin, dallas, { auserid: current_user.id, buserid: target_user.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
|
||||
|
||||
visit current_path
|
||||
hoverable = find(".rsvp-details[data-user-id='#{target_user.id}'] .latency#{expected[:latency_badge_selector]}", text: expected[:latency_badge_text])
|
||||
|
||||
verify_score_hover(score, current_user, target_user, hoverable)
|
||||
end
|
||||
|
||||
# will verify that the score shown match the score desired
|
||||
def verify_session_detail_score(score, current_user, target_user, target_path)
|
||||
|
||||
expected = expected_score_info(score, current_user, target_user)
|
||||
|
||||
Score.connection.execute('DELETE FROM scores').check
|
||||
if score
|
||||
create_score(austin, dallas, { auserid: current_user.id, buserid: target_user.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
|
||||
|
||||
visit target_path
|
||||
hoverable = find(".latency#{expected[:latency_badge_selector]}[data-user-id='#{target_user.id}']", text: expected[:latency_badge_text])
|
||||
|
||||
verify_score_hover(score, current_user, target_user, hoverable)
|
||||
end
|
||||
|
||||
def verify_score_hover(score, current_user, target_user, hoverable)
|
||||
hoverable.help_bubble
|
||||
|
||||
if current_user == target_user
|
||||
find('.help-musician-score-self p', text: 'You are looking at your own account.')
|
||||
|
|
@ -252,9 +305,10 @@ def verify_score_hover(score, parent_selector, current_user, target_user)
|
|||
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": '?')
|
||||
find('.help-musician-score-count p', text: 'The score shown is the one-way latency (or delay) in milliseconds from you to this user. This score is calculated using the following three values that JamKazam gathers:')
|
||||
find('.help-musician-score-count .my-gear-latency.partial .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.partial .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.partial .measurement-value', text: score ? "#{score} ms": '?')
|
||||
end
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -2,12 +2,6 @@ module Requests
|
|||
|
||||
module FeatureHelpers
|
||||
|
||||
def poltergeist_setup
|
||||
Capybara.javascript_driver = :poltergeist
|
||||
Capybara.current_driver = Capybara.javascript_driver
|
||||
Capybara.default_wait_time = 30 # these tests are SLOOOOOW
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
module JsonHelpers
|
||||
|
|
|
|||
Loading…
Reference in New Issue