Newer
Older
/*!
* Piwik - free/libre analytics platform
* ViewDataTable screenshot tests.
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
describe("SegmentSelectorEditorTest", function () {
var selectorsToCapture = ".segmentEditorPanel,.segmentEditorPanel .dropdown-body,.segment-element";
this.timeout(0);
var generalParams = 'idSite=1&period=year&date=2012-08-09';
var url = '?module=CoreHome&action=index&' + generalParams + '#?' + generalParams + '&category=General_Actions&subcategory=General_Pages';
function selectFieldValue(page, fieldName, textToSelect)
{
page.execCallback(function () {
page.webpage.evaluate(function(fieldName) {
$(fieldName + ' input.select-dropdown').click();
}, fieldName);
});
page.execCallback(function () {
page.webpage.evaluate(function(fieldName, textToSelect) {
$(fieldName + ' .dropdown-content.active li:contains("' + textToSelect + '"):first').click();
}, fieldName, textToSelect);
});
}
function selectDimension(page, prefixSelector, category, name)
{
page.click(prefixSelector + ' .metricListBlock .select-wrapper');
page.click(prefixSelector + ' .metricListBlock .expandableList h4:contains(' + category + ')');
page.click(prefixSelector + ' .metricListBlock .expandableList .secondLevel li:contains(' + name + ')');
}
it("should load correctly", function (done) {
expect.screenshot("0_initial").to.be.captureSelector(selectorsToCapture, function (page) {
page.load(url);
}, done);
});
it("should open selector when control clicked", function (done) {
expect.screenshot("1_selector_open").to.be.captureSelector(selectorsToCapture, function (page) {
}, done);
});
it("should open segment editor when edit link clicked for existing segment", function (done) {
expect.screenshot("2_segment_editor_update").to.be.captureSelector(selectorsToCapture, function (page) {
page.evaluate(function() {
$('.segmentList .editSegment:first').click()
}, 200);
}, done);
});
it("should start editing segment name when segment name edit link clicked", function (done) {
expect.screenshot("3_segment_editor_edit_name").to.be.captureSelector(selectorsToCapture, function (page) {
page.click('.segmentEditorPanel .editSegmentName');
}, done);
});
it("should show the egment editor's available segments dropdown", function (done) {
expect.screenshot("6_segment_editor_droplist").to.be.captureSelector(selectorsToCapture, function (page) {
page.mouseMove('.available_segments a.dropList');
page.click('.available_segments a.dropList');
}, done);
});
it("should change segment when another available segment clicked in segment editor's available segments dropdown", function (done) {
expect.screenshot("6_segment_editor_different").to.be.captureSelector(selectorsToCapture, function (page) {
page.click('.ui-menu-item a:contains(Add new segment)');
}, done);
});
it("should close the segment editor when the close link is clicked", function (done) {
expect.screenshot("7_segment_editor_closed").to.be.captureSelector(selectorsToCapture, function (page) {
page.evaluate(function () {
$('.segmentEditorPanel .segment-footer .close').click();
});
}, done);
});
it("should open blank segment editor when create new segment link is clicked", function (done) {
expect.screenshot("8_segment_editor_create").to.be.captureSelector(selectorsToCapture, function (page) {
page.click('.add_new_segment');
}, done);
});
it("should update segment expression when selecting different segment", function (done) {
expect.screenshot("dimension_drag_drop").to.be.captureSelector(selectorsToCapture, function (page) {
selectDimension(page, '.segmentRow0', 'Actions', 'Action URL');
}, done);
});
// phantomjs won't take screenshots of dropdown windows, so skip this test
it.skip("should show suggested segment values when a segment value input is focused", function (done) {
expect.screenshot("suggested_values").to.be.captureSelector(selectorsToCapture, function (page) {
page.click('.segmentEditorPanel .ui-autocomplete-input');
}, done);
});
it("should add an OR condition when clicking on add OR", function (done) {
expect.screenshot("add_new_or_condition").to.be.captureSelector(selectorsToCapture, function (page) {
page.click('.segmentEditorPanel .segment-add-or');
}, done);
});
it("should add an OR condition when a segment dimension is selected in the OR placeholder section", function (done) {
expect.screenshot("drag_or_condition").to.be.captureSelector(selectorsToCapture, function (page) {
selectDimension(page, '.segmentRow0 .segment-row:last', 'Actions', 'Clicked URL');
}, done);
});
it("should add an AND condition when clicking on add AND", function (done) {
expect.screenshot("add_new_and_condition").to.be.captureSelector(selectorsToCapture, function (page) {
page.click('.segmentEditorPanel .segment-add-row');
}, done);
});
it("should add an AND condition when a segment dimension is dragged to the AND placeholder section", function (done) {
expect.screenshot("drag_and_condition").to.be.captureSelector(selectorsToCapture, function (page) {
selectDimension(page, '.segmentRow1', 'Actions', 'Clicked URL');
}, done);
});
it("should save a new segment and add it to the segment list when the form is filled out and the save button is clicked", function (done) {
expect.screenshot("saved").to.be.captureSelector(selectorsToCapture, function (page) {
page.evaluate(function () {
$('.metricValueBlock input').each(function (index) {
$(this).val('value ' + index).change();
});
});
page.sendKeys('input.edit_segment_name', 'new segment');
page.click('.segmentRow0 .segment-or'); // click somewhere else to save new name
page.evaluate(function () {
$('button.saveAndApply').click();
});
page.click('.segmentationContainer');
}, done);
});
it("should show the new segment after page reload", function (done) {
expect.screenshot("saved").to.be.captureSelector("saved_reload", selectorsToCapture, function (page) {
page.reload();
}, done);
});
it("should correctly load the new segment's details when the new segment is edited", function (done) {
expect.screenshot("saved_details").to.be.captureSelector(selectorsToCapture, function (page) {
page.click('.segmentList li[data-idsegment=4] .editSegment');
}, done);
});
it("should correctly should show a confirmation when changing segment definition", function (done) {
expect.screenshot("update_confirmation").to.be.captureSelector('.modal.open', function (page) {
page.click('.segmentEditorPanel .editSegmentName');
page.evaluate(function () {
$('input.edit_segment_name').val('').change();
});
page.sendKeys('input.edit_segment_name', 'edited segment');
page.click('.segmentRow0 .segment-or:first'); // click somewhere else to save new name
selectFieldValue(page, '.segmentRow0 .segment-row:first .metricMatchBlock', 'Is not');
selectFieldValue(page, '.segmentRow0 .segment-row:last .metricMatchBlock', 'Is not');
selectFieldValue(page, '.segmentRow1 .segment-row .metricMatchBlock', 'Is not');
page.evaluate(function () {
$('.metricValueBlock input').each(function (index) {
$(this).val('new value ' + index).change();
});
});
page.evaluate(function () {
$('button.saveAndApply').click();
});
}, done);
});
it("should correctly update the segment when saving confirmed", function (done) {
expect.screenshot("updated").to.be.captureSelector(selectorsToCapture, function (page) {
page.click('.modal.open .modal-footer a:contains(Yes):visible');
page.click('.segmentationContainer');
}, done);
});
it("should show the updated segment after page reload", function (done) {
expect.screenshot("updated_reload").to.be.captureSelector("updated_reload", selectorsToCapture, function (page) {
page.reload();
}, done);
});
it("should correctly load the updated segment's details when the updated segment is edited", function (done) {
expect.screenshot("updated_details").to.be.captureSelector(selectorsToCapture, function (page) {
page.click('.segmentList li[data-idsegment=4] .editSegment');
}, done);
});
it("should correctly show delete dialog when the delete link is clicked", function (done) {
expect.screenshot('deleted_dialog').to.be.captureSelector('.modal.open', function (page) {
page.evaluate(function () {
$('.segmentEditorPanel a.delete').click();
});
}, done);
});
it("should correctly remove the segment when the delete dialog is confirmed", function (done) {
expect.screenshot('deleted').to.be.captureSelector(selectorsToCapture + ',.modal.open', function (page) {
page.click('.modal.open .modal-footer a:contains(Yes):visible');
}, done);
});
it("should not show the deleted segment after page reload", function (done) {
expect.screenshot('deleted').to.be.captureSelector('deleted_reload', selectorsToCapture, function (page) {
page.reload();
}, done);
});