|
|
@@ -0,0 +1,101 @@
|
|
|
+
|
|
|
+describe("JobSubModel", function(){
|
|
|
+ var viewModel;
|
|
|
+
|
|
|
+ function getSampleDesign(id, canSubmit, canDelete){
|
|
|
+ return {
|
|
|
+ "url_params":"/fake/params/url/"+id,
|
|
|
+ "description":"[Sample] Jasmine Job "+id,
|
|
|
+ "last_modified":1350993390 + id,
|
|
|
+ "can_delete":canDelete,
|
|
|
+ "owner":"jasmine",
|
|
|
+ "url_edit":"/fake/edit/url/"+id,
|
|
|
+ "url_submit":"/fake/submit/url/"+id,
|
|
|
+ "id":id,
|
|
|
+ "can_submit":canSubmit,
|
|
|
+ "name":"jasmine_job_"+id,
|
|
|
+ "url_clone":"/fake/clone/url/"+id,
|
|
|
+ "url_delete":"/fake/delete/url/"+id,
|
|
|
+ "type":"mapreduce"
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ var sampleDesigns = [
|
|
|
+ getSampleDesign(1, true, true),
|
|
|
+ getSampleDesign(2, false, true),
|
|
|
+ getSampleDesign(3, false, false)
|
|
|
+ ];
|
|
|
+
|
|
|
+ beforeEach(function(){
|
|
|
+ viewModel = new JobSubModel(sampleDesigns);
|
|
|
+ ko.applyBindings(viewModel);
|
|
|
+ });
|
|
|
+
|
|
|
+ it("should render the design table on applyBindings", function(){
|
|
|
+ expect($("#designs tr").length).toEqual(viewModel.designs().length);
|
|
|
+ });
|
|
|
+
|
|
|
+ describe("When clicking select all", function(){
|
|
|
+
|
|
|
+ it("should select first all designs and deselect them all", function(){
|
|
|
+ viewModel.selectAll();
|
|
|
+ expect(viewModel.selectedDesigns().length).toEqual(viewModel.designs().length);
|
|
|
+ viewModel.selectAll();
|
|
|
+ expect(viewModel.selectedDesigns().length).toEqual(0);
|
|
|
+ });
|
|
|
+
|
|
|
+ it("should add a css class to the 'Select All' checkbox", function(){
|
|
|
+ viewModel.selectAll();
|
|
|
+ expect($("#selectAll").hasClass("icon-ok")).toBeTruthy();
|
|
|
+ });
|
|
|
+
|
|
|
+ it("should disable the action buttons", function(){
|
|
|
+ viewModel.selectAll();
|
|
|
+ expect($(".btn:enabled").length).toEqual(0);
|
|
|
+ });
|
|
|
+
|
|
|
+ });
|
|
|
+
|
|
|
+ describe("When selecting a design", function(){
|
|
|
+
|
|
|
+ it("should return a selectedDesign", function(){
|
|
|
+ viewModel.designs()[0].selected(true);
|
|
|
+ expect(viewModel.selectedDesign().name).toEqual(viewModel.designs()[0].name);
|
|
|
+ });
|
|
|
+
|
|
|
+ it("should always enable the clone button", function(){
|
|
|
+ viewModel.designs()[0].selected(true);
|
|
|
+ expect($(".btn:enabled:contains('Clone')").length).toEqual(1);
|
|
|
+ viewModel.designs()[0].selected(false);
|
|
|
+ expect($(".btn:enabled:contains('Clone')").length).toEqual(0);
|
|
|
+ viewModel.designs()[1].selected(true);
|
|
|
+ expect($(".btn:enabled:contains('Clone')").length).toEqual(1);
|
|
|
+ });
|
|
|
+
|
|
|
+ it("should enable the submit button if canSubmit is true", function(){
|
|
|
+ viewModel.designs()[0].selected(true);
|
|
|
+ expect($(".btn:enabled:contains('Submit')").length).toEqual(1);
|
|
|
+ viewModel.designs()[0].selected(false);
|
|
|
+ viewModel.designs()[1].selected(true);
|
|
|
+ expect($(".btn:enabled:contains('Submit')").length).toEqual(0);
|
|
|
+ });
|
|
|
+
|
|
|
+ it("should enable the edit button if canSubmit is true", function(){
|
|
|
+ viewModel.designs()[0].selected(true);
|
|
|
+ expect($(".btn:enabled:contains('Edit')").length).toEqual(1);
|
|
|
+ viewModel.designs()[0].selected(false);
|
|
|
+ viewModel.designs()[1].selected(true);
|
|
|
+ expect($(".btn:enabled:contains('Edit')").length).toEqual(0);
|
|
|
+ });
|
|
|
+
|
|
|
+ it("should enable the delete button if canDelete is true", function(){
|
|
|
+ viewModel.designs()[1].selected(true);
|
|
|
+ expect($(".btn:enabled:contains('Delete')").length).toEqual(1);
|
|
|
+ viewModel.designs()[1].selected(false);
|
|
|
+ viewModel.designs()[2].selected(true);
|
|
|
+ expect($(".btn:enabled:contains('Delete')").length).toEqual(0);
|
|
|
+ });
|
|
|
+
|
|
|
+ });
|
|
|
+});
|