fix session detail spec, fix session detail approve/cancel rsvp request actions

This commit is contained in:
Bert Owen 2014-07-08 17:47:46 +02:00
parent 27fe4f4ae9
commit 2bad833e58
5 changed files with 129 additions and 10 deletions

View File

@ -9,6 +9,7 @@
var rest = context.JK.Rest();
var sessionId = null;
var sessionData = null;
var rsvpData = null;
var $screen = null;
var $cancelRsvpBtn = null;
var $inviteOthersBtn = null;
@ -46,14 +47,53 @@
context.JK.app.layout.showDialog('rsvp-cancel-dialog');
}
function buildRsvpRequestActionParams(request_id, action) {
var params = {};
params.session_id = sessionData.id;
$.each(rsvpData, function(index, rsvp) {
if (rsvp.id == request_id) {
params.rsvp_responses = [];
$.each(rsvp.rsvp_requests_rsvp_slots, function(index, rsvp_slot) {
params.rsvp_responses.push({request_slot_id: rsvp_slot.id, accept: action});
})
}
});
return params;
}
function reset() {
$sessionDetail.html("");
}
function refreshSessionDetail(response) {
reset();
loadSessionData();
}
function approveRsvpRequest(e) {
e.preventDefault();
var rsvpId = $(e.target).attr('request-id');
var params = buildRsvpRequestActionParams(rsvpId, true);
rest.updateRsvpRequest(rsvpId, params)
.done(refreshSessionDetail)
.fail(app.ajaxError);
}
function declineRsvpRequest(e) {
e.preventDefault();
var rsvpId = $(e.target).attr('request-id');
var params = buildRsvpRequestActionParams(rsvpId, false);
rest.updateRsvpRequest(rsvpId, params)
.done(refreshSessionDetail)
.fail(app.ajaxError);
}
function events() {
@ -61,17 +101,33 @@
$cancelRsvpBtn.on('click', cancelRsvpRequest);
$screen.find(".approveRsvpRequest").on('click', approveRsvpRequest);
$screen.find(".declineRsvpRequest").on('click', declineRsvpRequest);
$screen.find(".cancelSessionRsvp").on('click', function(e) {
e.preventDefault();
var rsvpCancelDlg = new context.JK.RsvpCancelDialog(app, sessionData.id, $(this).attr('request-id'));
rsvpCancelDlg.initialize();
context.JK.app.layout.showDialog('rsvp-cancel-dialog');
});
}
function loadSessionData() {
rest.getSessionHistory(sessionId)
.done(renderSession)
.done(function(response) {
sessionData = response;
rest.getRsvpRequests(sessionId)
.done(function(rsvpResponse) {
rsvpData = rsvpResponse;
renderSession();
})
.fail(app.ajaxError);
})
.fail(app.ajaxError);
}
function renderSession(data) {
sessionData = data;
function renderSession() {
var hasPending = false;
var isOwner = false;
if (sessionData.user_id == context.JK.currentUserId) {
@ -85,7 +141,7 @@
isOwner = true;
}
else {
$.each(sessionData.pending_rsvp_requests, function(request) {
$.each(sessionData.pending_rsvp_requests, function(index, request) {
if (request.user_id == context.JK.currentUserId) {
hasPending = true;
sessionData.rsvpId = request.id;
@ -98,6 +154,8 @@
isOwner = false;
}
sessionData.isOwner = isOwner;
if (isOwner) {
$inviteOthersBtn.show();
$cancelRsvpBtn.hide();
@ -231,11 +289,28 @@
var avatar_url = request.resolved_photo_url;
var request_id = null;
$.each(rsvpData, function(index, rsvp) {
if (rsvp.user_id == request.id) {
var approved = true;
$.each(rsvp, function(index, rsvp_slot) {
if (rsvp_slot.approved == false) {
approved = false;
}
});
if (approved) {
request_id = rsvp.id;
}
}
});
rsvpHtml = context._.template(
$("#template-account-session-rsvp").html(),
{id: request.id, avatar_url: avatar_url,
user_name: request.name, instruments: instrumentLogoHtml,
latency: latencyHtml},
latency: latencyHtml, is_owner: sessionData.isOwner, request_id: request_id},
{variable: 'data'}
);
@ -315,6 +390,10 @@
this.beforeShow = beforeShow;
this.afterShow = afterShow;
$(document).on("rsvpCancelEvent", function() {
refreshSessionDetail();
});
return this;
};

View File

@ -64,7 +64,7 @@
session.notification_msg = "";
}
else {
$.each(session.pending_rsvp_requests, function(request) {
$.each(session.pending_rsvp_requests, function(index, request) {
if (request.user_id == context.JK.currentUserId) {
hasPending = true;
}

View File

@ -219,7 +219,7 @@
return $.ajax({
url: '/api/rsvp_requests/' + rsvpRequestId,
type: "POST",
data : responses,
data : JSON.stringify(responses),
dataType : 'json',
contentType: 'application/json'
});

View File

@ -108,7 +108,9 @@
%td
{{data.latency}}
.right
%a{href: "#", class: 'button-orange declineRsvpRequest', 'request-id' => "{{data.id}}"} CANCEL
= "{% if (data.is_owner == true) { %}"
%a{href: "#", class: 'button-orange cancelSessionRsvp', 'request-id' => "{{data.request_id}}"} CANCEL
= "{% }; %}"
.clearall
%script{type: 'text/template', id: 'template-account-session-properties'}

View File

@ -18,7 +18,7 @@ describe "Session Detail", :js => true, :type => :feature, :capybara_feature =>
stub_const("APP_CONFIG", web_config)
end
it "view pending requests" do
it "view pending requests on music session creator side" do
fast_signin(requested_rsvp_slot.music_session.creator, Nav.session_detail(requested_rsvp_slot.music_session))
find('h2', text: 'RSVPs')
@ -26,4 +26,42 @@ describe "Session Detail", :js => true, :type => :feature, :capybara_feature =>
find('#pendingRSVPs .rsvp-table td', text: searcher.name)
find("#pendingRSVPs .rsvp-table img[data-instrument-id='#{requested_rsvp_slot.instrument_id}']")
end
it "view pending requests on music session searcher side" do
fast_signin(searcher, Nav.session_detail(requested_rsvp_slot.music_session))
find('a#cancel-rsvp.button-orange')
find('h2', text: 'RSVPs')
find('div.rsvp-help-notice', text: 'Your RSVP has not been processed by session organizer yet')
end
it "approve pending requests" do
fast_signin(requested_rsvp_slot.music_session.creator, Nav.session_detail(requested_rsvp_slot.music_session))
find('a.approveRsvpRequest[request-id="' + requested_rsvp_slot.rsvp_requests[0].id + '"]').trigger(:click)
find('.session-musicians td', text: searcher.name)
fast_signin(searcher, Nav.session_detail(requested_rsvp_slot.music_session))
find('.session-musicians td', text: searcher.name)
end
it "decline pending requests" do
fast_signin(requested_rsvp_slot.music_session.creator, Nav.session_detail(requested_rsvp_slot.music_session))
find('a.declineRsvpRequest[request-id="' + requested_rsvp_slot.rsvp_requests[0].id + '"]').trigger(:click)
should_not have_selector('td', text: searcher.name)
end
it "cancel current session rsvp" do
fast_signin(requested_rsvp_slot.music_session.creator, Nav.session_detail(requested_rsvp_slot.music_session))
find('a.approveRsvpRequest[request-id="' + requested_rsvp_slot.rsvp_requests[0].id + '"]').trigger(:click)
find('.session-musicians td', text: searcher.name)
find('a.cancelSessionRsvp[request-id="' + requested_rsvp_slot.rsvp_requests[0].id + '"]').trigger(:click)
find('h1', text: 'cancel rsvp')
find('span.session-name', text: requested_rsvp_slot.music_session.name)
find('a#btnCancelRsvp').trigger(:click)
should_not have_selector('td', text: searcher.name)
end
end