- Coupon Add/Edit/Delete rule AJAX
- add tests casper JS
This commit is contained in:
gmorel
2013-09-11 14:40:55 +02:00
parent 7e2f57e618
commit a9dae509c7
10 changed files with 257 additions and 148 deletions

View File

@@ -0,0 +1,3 @@
//DIT = Environnement d'intégration
var copark_base_url = 'http://ws.copark.dit.linux.thelia.fr/';
casper.test.done(0);

View File

@@ -0,0 +1,3 @@
//LOCAL = ton pc
var thelia2_base_url = 'http://www.thelia2.dev/index.php/';
casper.test.done(0);

View File

@@ -0,0 +1,3 @@
//UAT = Recette client
var copark_base_url = 'http://ws.copark.uat.openstudio.fr/';
casper.test.done(0);

View File

@@ -0,0 +1,12 @@
casper.test.comment('Please edit 00_parameters.js to add your configuration');
var thelia2_login_admin_url = thelia2_base_url + 'admin/login';
//var findMyId = /([0-9]+)$/;
//var currentId;
casper.test.comment('Variables are set');
casper.test.done(0);

View File

@@ -0,0 +1,25 @@
casper.test.comment('Testing login');
casper.start(thelia2_login_admin_url, function() {
this.echo('\nLOGIN');
this.test.assertTitle('Welcome - Thelia Back Office', 'Web page title OK');
this.sendKeys('form[action*="checklogin"] input[name="thelia_admin_login[username]"]', 'thelia2');
this.sendKeys('form[action*="checklogin"] input[name="thelia_admin_login[password]"]', 'thelia2');
this.click('form[action*="checklogin"] input[type="submit"]');
});
casper.wait(1000, function() {
this.echo("\nWaiting....");
});
casper.then(function(){
this.echo('\nDASHBOARD');
console.log('Now on : ' + this.getCurrentUrl());
this.test.assertTitle('Back-office home - Thelia Back Office', 'Web page title OK');
this.test.assertSelectorHasText('#wrapper > div', ' This is the administration home page. Put some interesting statistics here, and display useful information :) ', 'Web page main content OK');
});
//RUN
casper.run(function() {
this.test.done();
});

View File

@@ -0,0 +1,26 @@
#!/bin/bash
# @author Guillaume MOREL
echo "Force dropping database. All data will be lost."
cd local/config/
echo -e "\n\e[01;34m[INFO] Building Models file\e[00m\n"
../../bin/propel build -v --output-dir=../../core/lib/
echo -e "\n\e[01;34m[INFO] Building SQL CREATE file\e[00m\n"
../../bin/propel sql:build -v --output-dir=../../install/
echo -e "\n\e[01;34m[INFO] Reloaded Thelia2 database\e[00m\n"
cd ../..
rm install/sqldb.map
php Thelia thelia:dev:reloadDB
echo -e "\n\e[01;34m[INFO] Installing fixtures\e[00m\n"
php install/faker.php
echo -e "\n\e[01;34m[INFO] Adding admin\e[00m\n"
php Thelia thelia:create-admin --login_name thelia2 --password thelia2 --last_name thelia2 --first_name thelia2
# casperjs test ./exe --pre=./conf/local.js --direct

View File

@@ -0,0 +1,4 @@
#!/bin/bash
# @author Quentin Dufour
/usrcasperjs test ./exe --pre=./conf/dit.js --xunit=reports/report.xml

View File

@@ -0,0 +1,148 @@
$(function($){
// Clean array from deleteValue (undefined) keys
Array.prototype.clean = function(deleteValue) {
for (var i = 0; i < this.length; i++) {
if (this[i] == deleteValue) {
this.splice(i, 1);
i--;
}
}
return this;
};
// Remove 1 Rule then Save Rules AJAX
couponManager.removeRuleAjax = function(id) {
// Delete rule in temporary array
delete couponManager.rulesToSave[id];
couponManager.rulesToSave.clean(undefined);
// Save
couponManager.saveRuleAjax();
};
// Add 1 Rule / or update the temporary Rules array then Save Rules via AJAX
couponManager.addRuleAjax = function(id) {
console.log('addRuleAjax '+ id);
// If create
if(!id) {
console.log('pushing');
couponManager.rulesToSave.push(couponManager.ruleToSave);
} else { // else update
console.log('editing ' + id);
couponManager.rulesToSave[id] = couponManager.ruleToSave;
// reset edit mode to off
couponManager.ruleIdToUpdate = false;
}
// Save
couponManager.saveRuleAjax();
};
// Set rule inputs to allow editing
couponManager.updateRuleAjax = function(id) {
couponManager.ruleToUpdate = couponManager.rulesToSave[id];
console.log('Set id to edit to ' + id);
couponManager.ruleIdToUpdate = id;
// Deleting this rule, we will reset it
delete couponManager.rulesToSave[id];
// Set the rule selector
$("#category-rule option").filter(function() {
return $(this).val() == couponManager.ruleToUpdate.serviceId;
}).prop('selected', true);
// Force rule input refresh
couponManager.loadRuleInputs(couponManager.ruleToUpdate.serviceId, function() {
couponManager.fillInRuleInputs();
});
};
// Fill in rule inputs
couponManager.fillInRuleInputs = function() {
console.log('fillInRuleInputs with');
console.log(couponManager.ruleToUpdate);
var operatorId = null;
var valueId = null;
var idName = null;
for (idName in couponManager.ruleToUpdate.operators) {
// Setting idName operator select
operatorId = idName + '-operator';
$('#' + operatorId).val(couponManager.ruleToUpdate.operators[idName]);
valueId = idName + '-value';
// Setting idName value input
$('#' + valueId).val(couponManager.ruleToUpdate.values[idName]);
}
couponManager.ruleToSave = couponManager.ruleToUpdate;
var id = couponManager.ruleIdToUpdate;
console.log('id to edit = ' + id);
if(id) {
console.log('setint rulesToSave[' + id + ']');
console.log(couponManager.ruleToSave);
couponManager.rulesToSave[id] = couponManager.ruleToSave;
}
};
// Save rules on click
couponManager.onClickSaveRule = function() {
$('#constraint-save-btn').on('click', function () {
couponManager.addRuleAjax(couponManager.ruleIdToUpdate);
});
};
couponManager.onClickSaveRule();
// Remove rule on click
couponManager.onClickDeleteRule = function() {
$('.constraint-delete-btn').on('click', function (e) {
e.preventDefault();
var $this = $(this);
couponManager.removeRuleAjax($this.attr('data-int'));
});
};
couponManager.onClickDeleteRule();
// Update rule on click
couponManager.onClickUpdateRule = function() {
$('.constraint-update-btn').on('click', function (e) {
e.preventDefault();
var $this = $(this);
couponManager.updateRuleAjax($this.attr('data-int'));
// Hide row being updated
$this.parent().parent().remove();
});
};
couponManager.onClickUpdateRule();
// Reload effect inputs when changing effect
couponManager.onEffectChange = function() {
$('#effect').on('change', function () {
var optionSelected = $("option:selected", this);
$('#effectToolTip').html(optionSelected.attr("data-description"));
});
};
couponManager.onEffectChange();
// Reload rule inputs when changing effect
couponManager.onRuleChange = function() {
$('#category-rule').on('change', function () {
couponManager.loadRuleInputs($(this).val(), function(ruleToSave) {});
});
};
couponManager.onRuleChange();
// Fill in ready to be saved rule array
// var onInputsChange = function()
// In AJAX response
});
// Rule to save
var couponManager = {};
couponManager.ruleToSave = {};
couponManager.ruleIdToUpdate = false;

View File

@@ -37,24 +37,19 @@
<script src="{$asset_url}"></script> <script src="{$asset_url}"></script>
{/javascripts} {/javascripts}
{javascripts file='assets/js/coupon.js'}
<script src="{$asset_url}"></script>
{/javascripts}
<script> <script>
$(function($){ $(function($){
miniBrowser(0, '/test_to_remove/datas_coupon_edit.json'); miniBrowser(0, '/test_to_remove/datas_coupon_edit.json');
Array.prototype.clean = function(deleteValue) {
for (var i = 0; i < this.length; i++) {
if (this[i] == deleteValue) {
this.splice(i, 1);
i--;
}
}
return this;
};
// Init Rules // Init Rules
var initRules = function() { couponManager.initRules = function() {
var rules = []; var rules = [];
{foreach from=$rulesObject key=k item=rule} {foreach from=$rulesObject key=k item=rule}
// Init rule
var rule = {}; var rule = {};
rule['serviceId'] = '{$rule.serviceId nofilter}'; rule['serviceId'] = '{$rule.serviceId nofilter}';
rule['operators'] = {}; rule['operators'] = {};
@@ -64,19 +59,24 @@
rule['operators']['{$input nofilter}'] = '{$operator nofilter}'; rule['operators']['{$input nofilter}'] = '{$operator nofilter}';
rule['values']['{$input nofilter}'] = '{$rule.validators.setValues[$input] nofilter}'; rule['values']['{$input nofilter}'] = '{$rule.validators.setValues[$input] nofilter}';
{/foreach} {/foreach}
// Add rule
rules.push(rule); rules.push(rule);
{/foreach} {/foreach}
return rules; return rules;
} };
// Save Rules AJAX // Save Rules AJAX
var saveRuleAjax = function() { couponManager.saveRuleAjax = function() {
$('#constraint-add-operators-values').html('<div class="loading" ></div>');
console.log('about to save');
console.log(couponManager.rulesToSave);
var $url = '{$urlAjaxUpdateRules}'; var $url = '{$urlAjaxUpdateRules}';
$.ajax({ $.ajax({
type: "POST", type: "POST",
url: $url, url: $url,
data: {literal}{{/literal}rules:JSON.stringify(rulesToSave){literal}}{/literal}, data: {literal}{{/literal}rules:JSON.stringify(couponManager.rulesToSave){literal}}{/literal},
statusCode: { statusCode: {
404: function() { 404: function() {
$('#constraint-add-operators-values').html( $('#constraint-add-operators-values').html(
@@ -87,72 +87,13 @@
}).done(function(data) { }).done(function(data) {
$('#constraint-list').html(data); $('#constraint-list').html(data);
$('#constraint-add-operators-values').html(''); $('#constraint-add-operators-values').html('');
couponManager.onClickUpdateRule();
couponManager.onClickDeleteRule();
}); });
} };
// Remove 1 Rule then Save Rules AJAX
var removeRuleAjax = function(id) {
// Delete rule in temporary array
delete rulesToSave[id];
rulesToSave.clean(undefined);
// Save
saveRuleAjax();
}
// Add 1 Rule / or update the temporary Rules array then Save Rules via AJAX
var addRuleAjax = function(id) {
// If update
if(typeof id === 'number' && id % 1 == 0) {
rulesToSave[id] = ruleToSave;
} else { // If create
rulesToSave.push(ruleToSave);
}
// Save
saveRuleAjax();
}
// Set rule inputs to allow editing
var updateRuleAjax = function(id) {
ruleToSave = rulesToSave[id];
var ruleToUpdate = ruleToSave;
// Deleting this rule, we will reset it
delete rulesToSave[id];
// Set the rule seletor
$("#category-rule option").filter(function() {
return $(this).val() == ruleToSave.serviceId;
}).prop('selected', true);
// Force rule input refresh
loadRuleInputs(ruleToSave.serviceId, ruleToUpdate, function(ruleToUpdate) {
fillInRuleInputs(ruleToUpdate);
});
}
// Fill in rule inputs
var fillInRuleInputs = function(ruleToUpdate) {
var valueId = null;
var operatorId = null;
for (idName in ruleToUpdate.operators) {
// Setting idName operator input
operatorId = idName + '-operator';
$('#' + operatorId).val(ruleToUpdate.operators[idName]);
// Setting idName value input
valueId = idName + '-value';
$('#' + valueId).val(ruleToUpdate.values[idName]);
}
}
// Reload rule inputs // Reload rule inputs
var loadRuleInputs = function(ruleId, ruleToSave, callBack) { couponManager.loadRuleInputs = function(ruleId, callBack) {
$('#constraint-add-operators-values').html('<div class="loading" ></div>'); $('#constraint-add-operators-values').html('<div class="loading" ></div>');
var url = "{$urlAjaxGetRuleInput}"; var url = "{$urlAjaxGetRuleInput}";
url = url.replace('ruleId', ruleId) url = url.replace('ruleId', ruleId)
@@ -167,71 +108,13 @@
} }
}).done(function(data) { }).done(function(data) {
$('#constraint-add-operators-values').html(data); $('#constraint-add-operators-values').html(data);
return callBack(ruleToSave);
return callBack();
}); });
} };
// Save rules on click
var onClickSaveRule = function() {
$('#constraint-save-btn').on('click', function (e) {
addRuleAjax();
});
}
onClickSaveRule();
// Remove rule on click
var onClickDeleteRule = function() {
$('.constraint-delete-btn').on('click', function (e) {
e.preventDefault();
var $this = $(this);
removeRuleAjax($this.attr('data-int'));
});
}
onClickDeleteRule();
// Update rule on click
var onClickUpdateRule = function() {
$('.constraint-update-btn').on('click', function (e) {
e.preventDefault();
var $this = $(this);
updateRuleAjax($this.attr('data-int'));
// Hide row being updated
$this.parent().parent().remove();
});
}
onClickUpdateRule();
// Reload effect inputs when changing effect
var onEffectChange = function() {
$('#effect').on('change', function (e) {
var optionSelected = $("option:selected", this);
$('#effectToolTip').html(optionSelected.attr("data-description"));
});
}
onEffectChange();
// Reload rule inputs when changing effect
var onRuleChange = function() {
$('#category-rule').on('change', function (e) {
loadRuleInputs($(this).val(), null, function(ruleToSave) {literal}{}{/literal});
});
}
onRuleChange();
// Fill in ready to be saved rule array
// var onInputsChange = function()
// In AJAX response
// Rules which will be saved // Rules which will be saved
var rulesToSave = initRules(); couponManager.rulesToSave = couponManager.initRules();
}); });
// Rule to save
var ruleToSave = {literal}{}{/literal};
</script> </script>
{/block} {/block}

View File

@@ -72,29 +72,31 @@
<script> <script>
// Init Rules to set // Init Rules to set
ruleToSave['serviceId'] = '{$ruleId}'; couponManager.ruleToSave['serviceId'] = '{$ruleId}';
ruleToSave['operators'] = {literal}{}{/literal}; couponManager.ruleToSave['operators'] = {literal}{}{/literal};
ruleToSave['values'] = {literal}{}{/literal}; couponManager.ruleToSave['values'] = {literal}{}{/literal};
{foreach from=$inputs.inputs key=name item=input} {foreach from=$inputs.inputs key=name item=input}
ruleToSave['operators']['{$name nofilter}'] = '{foreach from=$inputs.inputs[$name].availableOperators key=keyOperator item=valueOperator name=operators}{if $smarty.foreach.operators.first}{$keyOperator nofilter}{/if}{/foreach}'; couponManager.ruleToSave['operators']['{$name nofilter}'] = '{foreach from=$inputs.inputs[$name].availableOperators key=keyOperator item=valueOperator name=operators}{if $smarty.foreach.operators.first}{$keyOperator nofilter}{/if}{/foreach}';
ruleToSave['values']['{$name nofilter}'] = '{if count($inputs.inputs[$name].availableValues) != 0}{foreach from=$inputs.inputs[$name].availableValues key=keyValue item=valueValue name=values}{if $smarty.foreach.values.first}{$keyValue nofilter}{/if}{/foreach}{else}to set{/if}'; couponManager.ruleToSave['values']['{$name nofilter}'] = '{if count($inputs.inputs[$name].availableValues) != 0}{foreach from=$inputs.inputs[$name].availableValues key=keyValue item=valueValue name=values}{if $smarty.foreach.values.first}{$keyValue nofilter}{/if}{/foreach}{else}to set{/if}';
{/foreach} {/foreach}
// Fill in ready to be saved rule array // Fill in ready to be saved rule array
var onInputsChange = function() {literal}{{/literal} couponManager.onInputsChange = function() {literal}{{/literal}
{foreach from=$inputs.inputs key=name item=input} {foreach from=$inputs.inputs key=name item=input}
// Operator selector // Operator selector
$('#{$name}-operator').change(function (e) { $('#{$name}-operator').change(function (e) {
console.log('changin operator');
var $this = $(this); var $this = $(this);
ruleToSave['operators']['{$name nofilter}'] = $this.val(); couponManager.ruleToSave['operators']['{$name nofilter}'] = $this.val();
}); });
// Value input // Value input
$('#{$name}-value').change(function (e) { $('#{$name}-value').change(function (e) {
console.log('changin value');
var $this = $(this); var $this = $(this);
ruleToSave['values']['{$name nofilter}'] = $this.val(); couponManager.ruleToSave['values']['{$name nofilter}'] = $this.val();
}); });
{/foreach} {/foreach}
{literal}}{/literal} {literal}}{/literal}
onInputsChange(); couponManager.onInputsChange();
</script> </script>