Skip to content

Instantly share code, notes, and snippets.

@mlent
Created June 30, 2015 19:11
Show Gist options
  • Save mlent/f62afe90599a6139f947 to your computer and use it in GitHub Desktop.
Save mlent/f62afe90599a6139f947 to your computer and use it in GitHub Desktop.
define([
'angular',
'angularMocks',
'shop/shop_controller',
'text!/base/app/test/data/shop-api-products.json',
'text!/base/app/test/data/api-v0.1-me.json',
'text!/base/app/test/data/shop-api-countries.json',
'text!/base/app/test/data/shop-api-orders-search.json',
'common/services/resource',
'common/services/i18n',
'common/services/shop_service',
'common/services/product_service',
'common/services/order_service',
'common/services/address_service',
'common/services/resetter',
'common/models/me',
'/base/app/test/mock_state.js' // TODO: Find out why this needs .js
], function(
angular,
mocks,
ShopController,
productData,
meData,
countriesData,
openOrdersData,
resource,
i18nService,
shopService,
productService,
orderService,
addressService,
resetterService,
meModel,
mockStateService
) {
'use strict';
describe('ShopController', function() {
var $q, $rootScope, $controller, productResponseData, meModelResponseData,
countriesResponseData;
beforeEach(function() {
productResponseData = JSON.parse(productData).products;
meModelResponseData = JSON.parse(meData);
countriesResponseData = JSON.parse(countriesData);
angular.mock.module(function($provide) {
$provide.service(mockStateService.name, mockStateService.component);
$provide.service(resource.name, resource.component);
$provide.service(shopService.name, shopService.component);
$provide.service(productService.name, productService.component);
$provide.service(orderService.name, orderService.component);
$provide.service(addressService.name, addressService.component);
$provide.service(meModel.name, meModel.component);
$provide.service(resetterService.name, resetterService.component);
$provide.factory('i18n', [
'$http',
'$q',
'$locale',
'$window',
'$rootScope',
'$injector',
i18nService
]);
$provide.constant('AUTH_EVENTS', {
loginSuccess: 'auth-login-success',
regLoginSuccess: 'reg-login-success',
loginFailed: 'auth-login-failed',
logoutSuccess: 'auth-logout-success',
resetPassword: 'reset-password',
notAuthorized: 'auth-not-authorized'
});
});
angular.mock.inject(function($injector) {
$q = $injector.get('$q');
$rootScope = $injector.get('$rootScope');
$controller = $injector.get('$controller');
});
inject(function(meModel) {
// Set our meModelData
meModel.set(meModelResponseData);
});
});
function createSampleController(ProductService, OrderService, meModel, $state) {
var ctrl = $controller(ShopController.component, {
$scope: $rootScope,
$state: $state,
ProductService: ProductService,
OrderService: OrderService
});
$rootScope.$digest();
return ctrl;
}
it('should populate the view with products', inject(function(
ProductService,
OrderService,
meModel,
$state
) {
// Stub our service and spy on it
var productPromise = $q.defer();
productPromise.resolve(productResponseData);
spyOn(ProductService, 'getProducts').and.returnValue(productPromise.promise);
var countryPromise = $q.defer();
countryPromise.resolve(countriesResponseData);
spyOn(OrderService, 'getCountries').and.returnValue(countryPromise.promise);
var ordersPromise = $q.defer();
ordersPromise.resolve(openOrdersData);
spyOn(OrderService, 'getOrders').and.returnValue(ordersPromise.promise);
var shop = createSampleController(ProductService, OrderService, meModel, $state);
expect(shop.products).toEqual(productResponseData);
}));
it('should update when the products are selected', inject(function(
ProductService,
OrderService,
meModel,
$state
) {
// Stub our service and spy on it
var productPromise = $q.defer();
productPromise.resolve(productResponseData);
spyOn(ProductService, 'getProducts').and.returnValue(productPromise.promise);
var countryPromise = $q.defer();
countryPromise.resolve(countriesResponseData);
spyOn(OrderService, 'getCountries').and.returnValue(countryPromise.promise);
var ordersPromise = $q.defer();
ordersPromise.resolve(openOrdersData);
spyOn(OrderService, 'getOrders').and.returnValue(ordersPromise.promise);
var shop = createSampleController(ProductService, OrderService, meModel, $state);
expect(shop.hasSelectedProducts()).toBeFalsy();
}));
});
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment