define(["js/models/component_template"],
    function (ComponentTemplate) {

        describe("ComponentTemplates", function() {
            var mockTemplateJSON = {
                "templates": [
                    {
                        "category": "problem",
                        "boilerplate_name": "formularesponse.yaml",
                        "display_name": "Math Expression Input"
                    }, {
                        "category": "problem",
                        "boilerplate_name": null,
                        "display_name": "Blank Advanced Problem"
                    }, {
                        "category": "problem",
                        "boilerplate_name": "checkboxes.yaml",
                        "display_name": "Checkboxes"
                    }, {
                        "category": "problem",
                        "boilerplate_name": "multiple_choice.yaml",
                        "display_name": "Multiple Choice"
                    }, {
                        "category": "problem",
                        "boilerplate_name": "drag_and_drop.yaml",
                        "display_name": "Drag and Drop"
                    }, {
                        "category": "problem",
                        "boilerplate_name": "problem_with_hint.yaml",
                        "display_name": "Problem with Adaptive Hint"
                    }, {
                        "category": "problem",
                        "boilerplate_name": "imageresponse.yaml",
                        "display_name": "Image Mapped Input"
                    }, {
                        "category": "openassessment",
                        "boilerplate_name": null,
                        "display_name": "Peer Assessment"
                    }, {
                        "category": "problem",
                        "boilerplate_name": "an_easy_problem.yaml",
                        "display_name": "An Easy Problem"
                    }, {
                        "category": "word_cloud",
                        "boilerplate_name": null,
                        "display_name": "Word Cloud"
                    }, { // duplicate display name to verify sort behavior
                        "category": "word_cloud",
                        "boilerplate_name": "alternate_word_cloud.yaml",
                        "display_name": "Word Cloud"
                    }],
                "type": "problem"
            };

            it('orders templates correctly', function () {
                var lastTemplate = null,
                    firstComparison = true,
                    componentTemplate = new ComponentTemplate(),
                    template, templateName, i;
                componentTemplate.parse(mockTemplateJSON);
                for (i=0; i < componentTemplate.templates.length; i++) {
                    template = componentTemplate.templates[i];
                    templateName = template['display_name'];
                    if (lastTemplate) {
                        if (!firstComparison || lastTemplate['boilerplate_name']) {
                            expect(lastTemplate['display_name'] < templateName).toBeTruthy();
                        }
                        firstComparison = false;
                    } else {
                        // If the first template is blank, make sure that it has the correct category
                        if (!template['boilerplate_name']) {
                            expect(template['category']).toBe('problem');
                        }
                        lastTemplate = template;
                    }
                }
            });
        });
    });
