[IMP] website: js test/tour: raise an exception when cycling or time overlaps
authorChristophe Matthieu <chm@openerp.com>
Tue, 21 Jan 2014 10:07:17 +0000 (11:07 +0100)
committerChristophe Matthieu <chm@openerp.com>
Tue, 21 Jan 2014 10:07:17 +0000 (11:07 +0100)
bzr revid: chm@openerp.com-20140121100717-d8foqqz5vmdyowuo

addons/website/static/src/js/website.tour.js
addons/website_sale/static/src/js/website.tour.shop.js

index 7bb8b97..00dba53 100644 (file)
             var testId = 'test_'+tour.id+'_tour';
             this.tours.push(tour);
             var defaultDelay = 500; //ms
+            var overlapsCrash;
             var test = {
                 id: tour.id,
                 run: function (force) {
                     var actionSteps = _.filter(tour.steps, function (step) {
                        return step.trigger || step.sampleText;
                     });
+                    window.onbeforeunload = function () {
+                        clearTimeout(overlapsCrash);
+                    };
                     function executeStep (step) {
+                        var lastStep = window.localStorage.getItem(testId);
+                        var tryStep = lastStep != step.stepId ? 0 : parseInt(window.localStorage.getItem("last-"+testId) || 0, 10)+1;
+                        window.localStorage.setItem("last-"+testId, tryStep);
+                        if (tryStep > 2) {
+                            window.localStorage.removeItem(testId);
+                            throw "Test: '" + testId + "' cycling stape: '" + step.stepId + "'";
+                        }
+
                         var _next = false;
                         window.localStorage.setItem(testId, step.stepId);
                         function next () {
+                            clearTimeout(overlapsCrash);
                             _next = true;
                             var nextStep = actionSteps.shift();
                             if (nextStep) {
                                 setTimeout(function () {
                                     executeStep(nextStep);
-                                },0);
+                                }, step.delay || defaultDelay);
                             } else {
                                 window.localStorage.removeItem(testId);
                             }
                         }
-                        setTimeout(function () {
-                            var $element = $(step.element);
-                            if (step.triggers) step.triggers(next);
-                            if ((step.trigger === 'reload' || step.trigger.url) && _next) return;
-                            
-                            if (step.snippet && step.trigger === 'drag') {
-                                website.TestConsole.dragAndDropSnippet(step.snippet);
-                            } else if (step.trigger && step.trigger.id === 'change') {
-                                $element.trigger($.Event("change", { srcElement: $element }));
-                            } else if (step.sampleText) {
-                                $element.val(step.sampleText);
-                                $element.trigger($.Event("change", { srcElement: $element }));
-                            } else if ($element.is(":visible")) { // Click by default
-                                if (step.trigger.id === 'mousedown') {
-                                    $element.trigger($.Event("mousedown", { srcElement: $element }));
-                                }
-                                var evt = document.createEvent("MouseEvents");
-                                evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
-                                $element[0].dispatchEvent(evt);
-                                if (step.trigger.id === 'mouseup') {
-                                    $element.trigger($.Event("mouseup", { srcElement: $element }));
-                                }
-                            }
-                            if (!step.triggers) next();
+                        overlapsCrash = setTimeout(function () {
+                            window.localStorage.removeItem(testId);
+                            throw "Test: '" + testId + "' can't resolve stape: '" + step.stepId + "'";
                         }, step.delay || defaultDelay);
+
+                        var $element = $(step.element);
+                        if (step.triggers) step.triggers(next);
+                        if ((step.trigger === 'reload' || step.trigger.url) && _next) return;
+                        
+                        if (step.snippet && step.trigger === 'drag') {
+                            website.TestConsole.dragAndDropSnippet(step.snippet);
+                        } else if (step.trigger && step.trigger.id === 'change') {
+                            $element.trigger($.Event("change", { srcElement: $element }));
+                        } else if (step.sampleText) {
+                            $element.val(step.sampleText);
+                            $element.trigger($.Event("change", { srcElement: $element }));
+                        } else if ($element.is(":visible")) { // Click by default
+                            if (step.trigger.id === 'mousedown') {
+                                $element.trigger($.Event("mousedown", { srcElement: $element }));
+                            }
+                            var evt = document.createEvent("MouseEvents");
+                            evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
+                            $element[0].dispatchEvent(evt);
+                            if (step.trigger.id === 'mouseup') {
+                                $element.trigger($.Event("mouseup", { srcElement: $element }));
+                            }
+                        }
+                        if (!step.triggers) next();
                     }
                     var url = new website.UrlParser(window.location.href);
                     if (tour.path && url.pathname !== tour.path && !window.localStorage.getItem(testId)) {
index 193d0d5..a1908d5 100644 (file)
                         url:   '/shop/payment/',
                     },
                     beforeTrigger: function (tour, callback) {
+                        if ($("input[name='name']").val() === "")
+                            $("input[name='name']").val("website_sale-test-shoptest");
+                        if ($("input[name='email']").val() === "")
+                            $("input[name='email']").val("website_sale-test-shoptest@website_sale-test-shoptest.optenerp.com");
                         $("input[name='phone']").val("123");
                         $("input[name='street']").val("123");
                         $("input[name='city']").val("123");
                         $("select[name='country_id']").val("21");
                     },
                 },
-                // {
-                //     stepId:    'delivery-checkout-product',
-                //     element:   'input[name="delivery_type"]:eq(1)',
-                //     trigger:   'reload',
-                // },
                 {
                     stepId:    'acquirer-checkout-product',
                     element:   'input[name="acquirer"]',