diff options
Diffstat (limited to 'webapp/js_tests/spec/DynamicStructureSpec.js')
-rw-r--r-- | webapp/js_tests/spec/DynamicStructureSpec.js | 204 |
1 files changed, 204 insertions, 0 deletions
diff --git a/webapp/js_tests/spec/DynamicStructureSpec.js b/webapp/js_tests/spec/DynamicStructureSpec.js new file mode 100644 index 0000000..ed09af0 --- /dev/null +++ b/webapp/js_tests/spec/DynamicStructureSpec.js @@ -0,0 +1,204 @@ +describe("", function() { + + jasmine.getFixtures().fixturesPath = "fixtures/"; + + it("Correct container", function() { + loadFixtures("container.html"); + + var container = $('#WGroupContainer'); + + expect(container).toExist(); + expect(container).toBeEmpty(); + }); + + describe("Groups", function() { + + beforeEach(function() { + + jasmine.getFixtures().fixturesPath = "fixtures/"; + loadFixtures("container.html"); + + var group_mustache_template = $.ajax({ + type: "GET", + url: '/jasmine/mustache_templates/group.html', + cache: false, + async: false + }).responseText; + $("#jasmine-fixtures").append(group_mustache_template); + + var group_mustache_template = $.ajax({ + type: "GET", + url: '/jasmine/mustache_templates/field.html', + cache: false, + async: false + }).responseText; + $("#jasmine-fixtures").append(group_mustache_template); + + var group_mustache_template = $.ajax({ + type: "GET", + url: '/jasmine/mustache_templates/option_default.html', + cache: false, + async: false + }).responseText; + $("#jasmine-fixtures").append(group_mustache_template); + + Mustache.tags = ['[[', ']]']; + + // Preparing mustache TEMPLATES + $('script[type="text/x-mustache-template"]').each(function(i, obj){ + TEMPLATES[$(obj).attr('name')] = $(obj).text(); + }); + + }); + + it("- Group template must contains right classes", function() { + var group_template = $(TEMPLATES['group']); + + var group_remove_button = group_template.find('.WGroup_remove'); + expect(group_remove_button).toExist(); + expect(group_remove_button).toBe(':button'); + + var group_add_button = group_template.find('.WGroup_add_field'); + expect(group_add_button).toExist(); + expect(group_add_button).toBe(':button'); + + expect(group_template.find('.error')).toExist(); + + expect(group_template.find('.WGroup_field_containter')).toExist(); + }); + + it("- factoryGroup must add a empty group in WGroupContainer", function() { + var groups = $('#WGroupContainer > .group'); + + expect(groups.length).toBe(0); + + factoryGroup(0, {"name": '', "fields": []}); + + groups = $('#WGroupContainer > .group'); + + expect(groups.length).toBe(1); + }); + + it("- Render group widget: A new group must contain right names for inputs", function() { + factoryGroup(0, {"name": '', "fields": []}); + + var inputs = $('.group').find(':input:not(button)'); + + $.each(inputs, function(i, input) { + expect($(input).attr('name')).toContain("groups.0."); + }); + + }); + + it("- Render group widget: show name", function() { + factoryGroup(0, {"name": 'group name', "fields": []}); + + var input_name = $(':input[name="groups.0.name"]'); + + expect(input_name.attr('value')).toBe('group name'); + }); + + it("- Render group widget: show error", function() { + factoryGroup(0, {"name": '', "fields": [], 'errors': ['error#1']}); + + var error = $('.error li'); + + expect(error).toHaveText('error#1'); + }); + + it("- Render fields", function() { + factoryGroup(0, + {"name": '', "fields": [{'widget_type': "InputText"}]} + ); + + fields = $('.field'); + + expect(fields.length).toBe(1); + + }); + + it("- bindGroupRemoveButton: Remove group and Update order of groups, very important!", function() { + var groups; + + factoryGroup(0, {"name": 'group name', "fields": []}); + + var group_widget_0 = $(".group"); + var button_remove_group_widget_0 = group_widget_0.find('.WGroup_remove'); + + factoryGroup(1, {"name": 'group name', "fields": []}); + + groups = $('#WGroupContainer > .group'); + + expect(groups.length).toBe(2); + + button_remove_group_widget_0.click(); + + groups = $('#WGroupContainer > .group'); + + expect(groups.length).toBe(1); + + expect($('.group').has($(':input[name="groups.0.order"]'))).toExist(); + + }); + + it("- Adding a empty field with right group order", function(){ + var group_order = 0; + factoryGroup(group_order, {'name': ''}); + var add_field_button = $('.group').find('.WGroup_add_field'); + + add_field_button.click(); + + var fields = $('.field'); + expect(fields.length).toBe(1); + + var inputs = $(fields[0]).find(':input:not(button)'); + $.each(inputs, function(i, input) { + expect($(input).attr('name')).toContain("groups.0.fields."); + }); + }); + + }); + + describe("Fields", function() { + + beforeEach(function() { + + jasmine.getFixtures().fixturesPath = "fixtures/"; + loadFixtures("container.html"); + + var group_mustache_template = $.ajax({ + type: "GET", + url: '/jasmine/mustache_templates/field.html', + cache: false, + async: false + }).responseText; + $("#jasmine-fixtures").append(group_mustache_template); + + Mustache.tags = ['[[', ']]']; + + // Preparing mustache TEMPLATES + $('script[type="text/x-mustache-template"]').each(function(i, obj){ + TEMPLATES[$(obj).attr('name')] = $(obj).text(); + }); + + }); + + it("- Field template must contains right classes", function() { + var field_template = $(TEMPLATES['field']); + + var field_remove_button = field_template.find('.WField_remove'); + expect(field_remove_button).toExist(); + expect(field_remove_button).toBe(':button'); + + expect(field_template.find('.error')).toExist(); + + expect(field_template.find('.WFieldWidgetType')).toExist(); + + expect(field_template.find('.WFieldAddOptionButton_container')).toExist(); + + expect(field_template.find('.WFieldOptions_container')).toExist(); + }); + + }); + +});
\ No newline at end of file |