Files
edx-platform/lms/static/js/spec/commerce/receipt_view_spec.js
Clinton Blackburn 5f6ddf47ec Merge pull request #12470 from open-craft/jbzdak/hide-verification
Honor verification required setting for professional courses in the receipt view
2016-10-25 09:16:36 -04:00

339 lines
14 KiB
JavaScript

define([
'jquery',
'jquery.ajax-retry',
'js/commerce/views/receipt_view',
'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers'
],
function($, AjaxRetry, ReceiptView, AjaxHelpers) {
'use strict';
describe('edx.commerce.ReceiptView', function() {
var data, courseResponseData, providerResponseData, mockRequests, mockRender, createReceiptView,
createProduct, createLine, createOrderResponse, doCheckVerification, doCheckVerificationNagRendered,
userResponseData;
createReceiptView = function() {
return new ReceiptView({el: $('#receipt-container')});
};
mockRequests = function(requests, method, apiUrl, responseData) {
AjaxHelpers.expectRequest(requests, method, apiUrl);
AjaxHelpers.respondWithJson(requests, responseData);
};
mockRender = function(useEcommerceOrderNumber, isVerified, requestInThemedSite) {
var requests, view, orderUrlFormat,
actualRequestInThemedSite = requestInThemedSite;
if (typeof actualRequestInThemedSite === 'undefined') {
actualRequestInThemedSite = 'False';
}
requests = AjaxHelpers.requests(this);
$('#receipt-container').data({
verified: isVerified,
'is-request-in-themed-site': actualRequestInThemedSite
});
view = createReceiptView();
view.useEcommerceApi = true;
if (useEcommerceOrderNumber) {
view.ecommerceOrderNumber = 'EDX-123456';
orderUrlFormat = '/api/commerce/v1/orders/EDX-123456/';
} else {
view.ecommerceBasketId = 'EDX-123456';
orderUrlFormat = '/api/commerce/v0/baskets/EDX-123456/order/';
}
view.render();
mockRequests(requests, 'GET', orderUrlFormat, data);
mockRequests(
requests, 'GET', '/commerce/checkout/verification_status/?course_id=' +
encodeURIComponent('course-v1:edx+dummy+2015_T3'), {is_verification_required: true}
);
mockRequests(
requests, 'GET', '/api/courses/v1/courses/course-v1:edx+dummy+2015_T3/', courseResponseData
);
mockRequests(
requests, 'GET', '/api/user/v1/accounts/user-1', userResponseData
);
mockRequests(requests, 'GET', '/api/credit/v1/providers/edx/', providerResponseData);
return view;
};
createProduct = function(attributes) {
var actualAttributes = attributes;
if (typeof actualAttributes === 'undefined') {
actualAttributes = [
{
name: 'certificate_type',
value: 'verified'
},
{
name: 'course_key',
code: 'course_key',
value: 'course-v1:edx+dummy+2015_T3'
},
{
name: 'credit_provider',
value: 'edx'
}
];
}
return {
attribute_values: actualAttributes,
stockrecords: [
{
price_currency: 'USD',
product: 123,
partner_sku: '1234ABC',
partner: 1,
price_excl_tax: '10.00',
id: 123
}
],
product_class: 'Seat',
title: 'Dummy title',
url: 'https://ecom.edx.org/api/v2/products/123/',
price: '10.00',
expires: null,
is_available_to_buy: true,
id: 123,
structure: 'child'
};
};
createLine = function(product) {
var actualProduct = product;
if (typeof actualProduct === 'undefined') {
actualProduct = createProduct();
}
return {
status: 'Open',
unit_price_excl_tax: '10.00',
product: actualProduct,
line_price_excl_tax: '10.00',
description: 'dummy description',
title: 'dummy title',
quantity: 1
};
};
createOrderResponse = function(lines) {
var actualLines = lines;
if (typeof actualLines === 'undefined') {
actualLines = [createLine()];
}
return {
status: 'Open',
billed_to: {
city: 'dummy city',
first_name: 'john',
last_name: 'doe',
country: 'AL',
line2: 'line2',
line1: 'line1',
state: '',
postcode: '12345'
},
lines: actualLines,
number: 'EDX-123456',
date_placed: '2016-01-01T01:01:01Z',
currency: 'USD',
total_excl_tax: '10.00'
};
};
doCheckVerification = function(attributes, expected) {
var view = createReceiptView(),
product = createProduct(attributes);
expect(view.requiresVerification(product)).toBe(expected);
};
doCheckVerificationNagRendered = function(attributes, userVerified, expected, requestInThemedSite) {
var view;
data = createOrderResponse([createLine(createProduct(attributes))]);
view = mockRender(true, userVerified, requestInThemedSite);
if (expected) {
expect(view.$('.nav-wizard.is-ready').text()).toContain('Want to confirm your identity later');
} else {
expect(view.$('.nav-wizard.is-ready').text()).toContain('Go to Dashboard');
}
};
beforeEach(function() {
var receiptFixture, providerFixture;
// Stub analytics tracking
window.analytics = jasmine.createSpyObj('analytics', ['page', 'track', 'trackLink']);
loadFixtures('js/fixtures/commerce/checkout_receipt.html');
receiptFixture = readFixtures('templates/commerce/receipt.underscore');
providerFixture = readFixtures('templates/commerce/provider.underscore');
appendSetFixtures(
'<script id="receipt-tpl" type="text/template" >' + receiptFixture + '</script>' +
'<script id="provider-tpl" type="text/template" >' + providerFixture + '</script>'
);
data = createOrderResponse();
providerResponseData = {
id: 'edx',
display_name: 'edX',
url: 'http://www.edx.org',
status_url: 'http://www.edx.org/status',
description: 'Nothing',
enable_integration: false,
fulfillment_instructions: '',
thumbnail_url: 'http://edx.org/thumbnail.png'
};
courseResponseData = {
id: 'course-v1:edx+dummy+2015_T3',
name: 'receipt test',
category: 'course',
org: 'edx',
run: '2015_T2',
course: 'CS420',
uri: 'http://test.com/api/courses/v1/courses/course-v1:edx+dummy+2015_T3/',
image_url: '/test.jpg',
start: '2030-01-01T00:00:00Z',
end: null
};
userResponseData = {
username: 'user-1',
name: 'full name'
};
});
it('sends analytic event when verified receipt is rendered', function() {
mockRender(true, 'True');
expect(window.analytics.track).toHaveBeenCalledWith(
'Completed Purchase',
{
orderId: 'EDX-123456',
total: '10.00',
currency: 'USD'
}
);
});
it('sends analytic event when non verified receipt is rendered', function() {
mockRender(true, 'False');
expect(window.analytics.track).toHaveBeenCalledWith(
'Completed Purchase',
{
orderId: 'EDX-123456',
total: '10.00',
currency: 'USD'
}
);
});
it('renders a receipt correctly with Ecommerce Order Number', function() {
var view;
view = mockRender(true, 'True');
expect(view.$('.course_name_placeholder').text()).toContain('receipt test');
});
it('renders a receipt correctly with Ecommerce Basket Id', function() {
var view;
view = mockRender(false, 'True');
expect(view.$('.course_name_placeholder').text()).toContain('receipt test');
});
it('requiresVerification returns true if product requires verification', function() {
var expected = true,
attributes = [
{name: 'certificate_type', value: 'professional'},
{name: 'course_key', value: 'course-v1:OC+OC+2'},
{name: 'id_verification_required', value: true}
];
doCheckVerification(attributes, expected, 'False');
});
it('requiresVerification returns true if product requires verification, different order', function() {
var expected = true,
attributes = [
{name: 'certificate_type', value: 'professional'},
{name: 'id_verification_required', value: true},
{name: 'course_key', value: 'course-v1:OC+OC+2'}
];
doCheckVerification(attributes, expected, 'False');
});
it('requiresVerification defaults to true', function() {
var expected = true,
attributes = [
{name: 'certificate_type', value: 'professional'},
{name: 'course_key', value: 'course-v1:OC+OC+2'}
];
doCheckVerification(attributes, expected, 'False');
});
it('requiresVerification returns false for courses not requiring verification', function() {
var expected = false,
attributes = [
{name: 'certificate_type', value: 'professional'},
{name: 'id_verification_required', value: false},
{name: 'course_key', value: 'course-v1:OC+OC+2'}
];
doCheckVerification(attributes, expected, 'False');
});
it('receipt view verification nag for not verified users in a verified course', function() {
var attributes = [
{name: 'certificate_type', value: 'professional'},
{name: 'id_verification_required', value: true},
{name: 'course_key', value: 'course-v1:edx+dummy+2015_T3'},
{name: 'credit_provider', value: 'edx'}
];
doCheckVerificationNagRendered(attributes, 'False', true, 'False');
});
it("receipt view doesn't show verification nag for a verified user in a verified course", function() {
var attributes = [
{name: 'certificate_type', value: 'professional'},
{name: 'id_verification_required', value: true},
{name: 'course_key', value: 'course-v1:edx+dummy+2015_T3'},
{name: 'credit_provider', value: 'edx'}
];
doCheckVerificationNagRendered(attributes, 'True', false, 'False');
});
it("receipt view doesn't show verification for a unverified user in a not verified course", function() {
var attributes = [
{name: 'certificate_type', value: 'professional'},
{name: 'id_verification_required', value: false},
{name: 'course_key', value: 'course-v1:edx+dummy+2015_T3'},
{name: 'credit_provider', value: 'edx'}
];
doCheckVerificationNagRendered(attributes, 'False', false, 'False');
});
it("receipt view doesn't show verification nag for a verified user in a not verified course", function() {
var attributes = [
{name: 'certificate_type', value: 'professional'},
{name: 'id_verification_required', value: false},
{name: 'course_key', value: 'course-v1:edx+dummy+2015_T3'},
{name: 'credit_provider', value: 'edx'}
];
doCheckVerificationNagRendered(attributes, 'True', false, 'False');
});
it("receipt view doesn't show verification nag for a not verified user in a verified" +
' course on themed site', function() {
var attributes = [
{name: 'certificate_type', value: 'professional'},
{name: 'id_verification_required', value: true},
{name: 'course_key', value: 'course-v1:edx+dummy+2015_T3'},
{name: 'credit_provider', value: 'edx'}
];
doCheckVerificationNagRendered(attributes, 'False', false, 'True');
});
});
}
);