it('should pass data into the dataSubject', inject([SendPageDataService], (service: SendPageDataService) => { spyOn(service.dataSubject, 'next').and.stub() service.dataBundle = this.testDataBundle service.dataStored = false service.getData() expect(service.dataSubject.next).not.toHaveBeenCalled() service.dataStored = true service.getData() expect(service.dataSubject.next).toHaveBeenCalledWith(service.dataBundle) }));
describe('extendCollection', function() { it('should be an alias for a specific invocation of addElementTransformer', function() { var spy = spyOn(Restangular, 'addElementTransformer'); var fn = function(collection) { collection.totalAmount = function() {}; return collection; }; Restangular.extendCollection('accounts', fn); expect(spy).toHaveBeenCalledWith('accounts', true, fn); }); });
describe("getByOrderCommand", () => { describe("validation success", () => { it("invokes the appropriate data proxy method", () => { dataProxy.getByOrder = function() {} spyOn(dataProxy, 'getByOrder'); var service = new OrderItemService(dataProxy); service.getByOrderCommand(1).execute((err, result) => { expect(dataProxy.getByOrder).toHaveBeenCalledWith(1, jasmine.any(Function)); }); }); }); });
it('should be able to clear it\'s data', inject([SendPageDataService], (service: SendPageDataService) => { this.blankBundle = service.dataBundle service.dataBundle = this.testDataBundle //fill with data spyOn(service.dataSubject, 'next').and.stub() service.clearData(true) expect(service.dataBundle).toEqual({errors: []}) expect(service.dataSubject.next).toHaveBeenCalledWith(service.dataBundle) }));
it('should return if errors are found in the submitted form data', inject([SendPageDataService], (service: SendPageDataService) => { spyOn(service, 'clearData').and.stub() spyOn(service, 'validateFormData').and.stub() spyOn(service, 'estimateFirstExchange').and.stub() service.dataStored = false service.dataBundle = {errors: []} let dataBundleAfterStorage = { errors: [], transferAmount: 5000, originCoin: 'nav', destCoin: 'eth', destAddr: 'Russia' } service.storeData( dataBundleAfterStorage.transferAmount, dataBundleAfterStorage.originCoin, dataBundleAfterStorage.destCoin, dataBundleAfterStorage.destAddr) expect(service.clearData).toHaveBeenCalled() expect(service.validateFormData).toHaveBeenCalledWith(dataBundleAfterStorage) expect(service.estimateFirstExchange).toHaveBeenCalledWith(dataBundleAfterStorage.originCoin, dataBundleAfterStorage.destCoin, dataBundleAfterStorage.transferAmount) expect(service.isDataSet).toBe(false) expect(service.dataStored).toBe(false) }));
var service = new BaseService(dataProxy); service.updateCommand({active: false, address: "456 First St."}).execute((err, result) => { expect(dataProxy.update).toHaveBeenCalledWith(expectedResult, jasmine.any(Function)); }); });
expect(dataProxy.update).toHaveBeenCalledWith(expectedResult, jasmine.any(Function)); }); });
it('should return if errors are found in the submitted form data', inject([SendPageDataService], (service: SendPageDataService) => { spyOn(service, 'clearData').and.stub() spyOn(service, 'validateFormData').and.stub() spyOn(service.dataSubject, 'next').and.stub() spyOn(service, 'setIsDataSet').and.callFake( () => service.isDataSet = true) service.dataStored = false service.dataBundle = {errors: ['error!']} let dataBundleAfterStorage = { errors: ['error!'], transferAmount: 5000, originCoin: 'nav', destCoin: 'eth', destAddr: 'Russia' } service.storeData( dataBundleAfterStorage.transferAmount, dataBundleAfterStorage.originCoin, dataBundleAfterStorage.destCoin, dataBundleAfterStorage.destAddr) expect(service.clearData).toHaveBeenCalled() expect(service.validateFormData).toHaveBeenCalledWith(dataBundleAfterStorage) expect(service.dataSubject.next).toHaveBeenCalledWith(dataBundleAfterStorage) expect(service.setIsDataSet).toHaveBeenCalledWith(true) expect(service.isDataSet).toBe(true) expect(service.dataStored).toBe(true) }));
var command = new ShipOrderItemCommand(1, orderItemDataProxy, new InventoryItemService(inventoryItemDataProxy)); command.execute((err, result) => { expect(inventoryItemDataProxy.update).toHaveBeenCalledWith({ id: 1, quantityOnHand: 0, productId: 3, version: 1 }, jasmine.any(Function)); jasmine.clock().mockDate(shippedOn); command.execute((err, result) => { expect(orderItemDataProxy.update).toHaveBeenCalledWith({ id: 1, status: "SHIPPED", shippedOn: shippedOn, quantity: 2 }, jasmine.any(Function)); jasmine.clock().mockDate(backorderedOn); command.execute((err, result) => { expect(orderItemDataProxy.update).toHaveBeenCalledWith({ id: 1, status: "BACKORDERED", backorderedOn: backorderedOn, quantity: 2 }, jasmine.any(Function));
var service = new InventoryItemService(dataProxy); service.insertCommand(inventoryItem).execute((err, result) => { expect(dataProxy.insert).toHaveBeenCalledWith(expectedResult, jasmine.any(Function)); }); });
it('should validate if a databundle\'s transferAmount is too large', inject([SendPageDataService], (service: SendPageDataService) => { //transfer amount IS NOT too large spyOn(service, 'pushError').and.stub() spyOn(service, 'checkAddressIsValid').and.returnValue(true) let mockDataBundle = { destAddr: 'NavHQ', estConvToNav: 0, changellyFeeOne: 0, errors: [] } service.validateDataBundle(mockDataBundle) expect(service.pushError).not.toHaveBeenCalled() //transfer amount IS too large mockDataBundle.estConvToNav = 99999 service.validateDataBundle(mockDataBundle) expect(service.pushError).toHaveBeenCalledWith(mockDataBundle, 'transferTooLarge') }));
var command = new DeleteOrderCommand(1, orderDataProxy, new OrderItemService(orderItemDataProxy)); command.execute((err, result) => { expect(orderItemDataProxy.destroy).toHaveBeenCalledWith(1, jasmine.any(Function)); expect(orderItemDataProxy.destroy).toHaveBeenCalledWith(2, jasmine.any(Function)); expect(orderItemDataProxy.destroy).toHaveBeenCalledWith(3, jasmine.any(Function)); }); }); var command = new DeleteOrderCommand(5, orderDataProxy, new OrderItemService(orderItemDataProxy)); command.execute((err, result) => { expect(orderDataProxy.destroy).toHaveBeenCalledWith(5, jasmine.any(Function)); }); });
); command.execute((err, result) => { expect(inventoryItemDataProxy.destroy).toHaveBeenCalledWith(1, jasmine.any(Function)); }); }); ); command.execute((err, result) => { expect(productDataProxy.destroy).toHaveBeenCalledWith(5, jasmine.any(Function)); }); });
describe('extendModel', function() { it('should be an alias for a specific invocation of addElementTransformer', function() { var spy = spyOn(Restangular, 'addElementTransformer'); var fn = function(model) { model.prettifyAmount = function() {}; return model; }; Restangular.extendModel('accounts', fn); expect(spy).toHaveBeenCalledWith('accounts', false, fn); }); });
it('should validate if a databundle\'s address is valid', inject([SendPageDataService], (service: SendPageDataService) => { spyOn(service, 'pushError').and.stub() spyOn(service, 'checkAddressIsValid').and.callFake( (str) => {return str ? true : false}) let mockDataBundle = { destAddr: 'to the moon!', estConvToNav: 0, changellyFeeOne: 0, errors: [] } // destAddr IS valid service.validateDataBundle(mockDataBundle) expect(service.pushError).not.toHaveBeenCalled() // destAddr IS NOT valid mockDataBundle.destAddr = undefined service.validateDataBundle(mockDataBundle) expect(service.pushError).toHaveBeenCalledWith(mockDataBundle, 'invalidDestAddress') }));