mirror of
https://github.com/apache/zeppelin
synced 2026-05-24 09:38:26 +00:00
add e2e tests
This commit is contained in:
parent
8c163d8210
commit
7f524ae3e5
2 changed files with 207 additions and 2 deletions
|
|
@ -1,9 +1,9 @@
|
|||
describe('Home e2e Test', function() {
|
||||
it('should have a welcome message', function() {
|
||||
browser.get('http://localhost:8080');
|
||||
var weblcomeElem = element(by.id('welcome'))
|
||||
var welcomeElem = element(by.id('welcome'))
|
||||
|
||||
expect(weblcomeElem.getText()).toEqual('Welcome to Zeppelin!')
|
||||
expect(welcomeElem.getText()).toEqual('Welcome to Zeppelin!')
|
||||
})
|
||||
|
||||
it('should have the button for importing notebook', function() {
|
||||
|
|
|
|||
205
zeppelin-web/e2e/searchBlock.spec.js
Normal file
205
zeppelin-web/e2e/searchBlock.spec.js
Normal file
|
|
@ -0,0 +1,205 @@
|
|||
describe('Search block e2e Test', function() {
|
||||
let testData = {
|
||||
textInFirstP: 'text word text',
|
||||
textInSecondP: 'text tete tt'
|
||||
}
|
||||
|
||||
/*Common methods for interact with elements*/
|
||||
let clickOn = function(elem) {
|
||||
browser.actions().mouseMove(elem).click().perform()
|
||||
}
|
||||
|
||||
let clickAndWait = function(elem){
|
||||
clickOn(elem)
|
||||
browser.sleep(60);
|
||||
}
|
||||
|
||||
let waitVisibility = function(elem) {
|
||||
browser.wait(protractor.ExpectedConditions.visibilityOf(elem))
|
||||
}
|
||||
|
||||
beforeEach(function() {
|
||||
browser.get('http://localhost:8080')
|
||||
clickOn(element(by.linkText('Create new note')))
|
||||
waitVisibility(element(by.id('noteCreateModal')))
|
||||
clickAndWait(element(by.id('createNoteButton')))
|
||||
})
|
||||
|
||||
afterEach(function() {
|
||||
clickOn(element(by.xpath('//*[@id="main"]//button[@ng-click="moveNoteToTrash(note.id)"]')))
|
||||
let moveToTrashDialogPath =
|
||||
'//div[@class="modal-dialog"][contains(.,"This note will be moved to trash")]'
|
||||
waitVisibility(element(by.xpath(moveToTrashDialogPath)))
|
||||
let okButton = element(
|
||||
by.xpath(moveToTrashDialogPath + '//div[@class="modal-footer"]//button[contains(.,"OK")]'))
|
||||
clickOn(okButton)
|
||||
})
|
||||
|
||||
/*Getting elements*/
|
||||
let getFindInput = function() {
|
||||
return element(by.id('findInput'))
|
||||
}
|
||||
|
||||
let getReplaceInput = function() {
|
||||
return element(
|
||||
by.xpath('//div[contains(@class, "search-group")]//span[text()="Replace"]//..//input'))
|
||||
}
|
||||
|
||||
let getNextOccurrenceButton = function() {
|
||||
return element(by.xpath('//div[contains(@class, "search-group")]' +
|
||||
'/div/button[@ng-click="nextOccurrence()"]'))
|
||||
}
|
||||
|
||||
let getPrevOccurrenceButton = function() {
|
||||
return element(by.xpath('//div[contains(@class, "search-group")]' +
|
||||
'/div/button[@ng-click="prevOccurrence()"]'))
|
||||
}
|
||||
|
||||
let getReplaceButton = function() {
|
||||
return element(by.xpath('//div[contains(@class, "search-group")]//button[@ng-click="replace()"]'))
|
||||
}
|
||||
|
||||
let getReplaceAllButton = function() {
|
||||
return element(
|
||||
by.xpath('//div[contains(@class, "search-group")]//button[@ng-click="replaceAll()"]'))
|
||||
}
|
||||
|
||||
let getMatchesElement = function() {
|
||||
return element(by.xpath('//div[contains(@class, "search-group")]' +
|
||||
'//span[contains(@class, "after-input")]'))
|
||||
}
|
||||
|
||||
/*Require: focus on any paragraph editor*/
|
||||
let openSearchBoxByShortcut = function() {
|
||||
browser.switchTo().activeElement().sendKeys(protractor.Key.chord(protractor.Key.CONTROL, "f"))
|
||||
}
|
||||
|
||||
let countSubstringOccurrence = function(s, subs) {
|
||||
return (s.match(new RegExp(subs,"g")) || []).length
|
||||
}
|
||||
|
||||
let cleanInput = function(inputElem) {
|
||||
inputElem.sendKeys(protractor.Key.chord(protractor.Key.CONTROL, "a"))
|
||||
inputElem.sendKeys(protractor.Key.BACK_SPACE)
|
||||
}
|
||||
|
||||
let checkFind = function(findInput, text, expectedMatchesCount) {
|
||||
cleanInput(findInput)
|
||||
findInput.sendKeys(text)
|
||||
let matchesCount = element(by.xpath('//div[contains(@class, "search-group")]' +
|
||||
'//span[contains(@class, "after-input")]'))
|
||||
matchesCount.getText().then(function(text) {
|
||||
expect(text.indexOf((expectedMatchesCount === 0 ? 0 : 1) + ' of ' +
|
||||
expectedMatchesCount) !== -1).toBe(true)
|
||||
})
|
||||
}
|
||||
|
||||
let makeTestParagraphs = function() {
|
||||
waitVisibility(element(by.repeater('currentParagraph in note.paragraphs')))
|
||||
browser.switchTo().activeElement().sendKeys(testData.textInFirstP)
|
||||
let addBelow = element(
|
||||
by.xpath('//div[@class="new-paragraph" and @ng-click="insertNew(\'below\');"]'))
|
||||
clickAndWait(addBelow)
|
||||
browser.switchTo().activeElement().sendKeys(testData.textInSecondP)
|
||||
}
|
||||
|
||||
let checkMatchesElement = function(elem, current, amount) {
|
||||
elem.getText().then(function(text) {
|
||||
expect(text.indexOf(current + ' of ' + amount) !== -1).toBe(true)})
|
||||
}
|
||||
|
||||
let sendKeysToInput = function(input, keys) {
|
||||
cleanInput(input)
|
||||
input.sendKeys(keys)
|
||||
}
|
||||
|
||||
let sendKeysToFindInput = function(keys) {
|
||||
sendKeysToInput(getFindInput(), keys)
|
||||
}
|
||||
|
||||
let sendKeysToReplaceInput = function(keys) {
|
||||
sendKeysToInput(getReplaceInput(), keys)
|
||||
}
|
||||
|
||||
/*Tests*/
|
||||
|
||||
it('shortcut works', function() {
|
||||
waitVisibility(element(by.repeater('currentParagraph in note.paragraphs')))
|
||||
openSearchBoxByShortcut()
|
||||
expect(element(by.xpath('//ul[contains(@class,"search-dropdown")]')).isDisplayed()).toBeTruthy()
|
||||
})
|
||||
|
||||
it('correct count of selections', function() {
|
||||
makeTestParagraphs()
|
||||
openSearchBoxByShortcut()
|
||||
let subs = 'te'
|
||||
sendKeysToFindInput(subs)
|
||||
var markers = element.all(by.xpath('//code-editor/div/div[@class="ace_scroller"]' +
|
||||
'/div[@class="ace_content"]/div[@class="ace_layer ace_marker-layer"]/div'))
|
||||
expect(markers.count()).toEqual(countSubstringOccurrence(testData.textInFirstP, subs) +
|
||||
countSubstringOccurrence(testData.textInSecondP, subs) + 1)
|
||||
})
|
||||
|
||||
it('correct matches count number', function() {
|
||||
makeTestParagraphs()
|
||||
openSearchBoxByShortcut()
|
||||
let findInput = getFindInput()
|
||||
clickAndWait(findInput)
|
||||
let subs = 't';
|
||||
checkFind(findInput, subs, countSubstringOccurrence(testData.textInFirstP, subs) +
|
||||
countSubstringOccurrence(testData.textInSecondP, subs))
|
||||
subs = 'te';
|
||||
checkFind(findInput, subs, countSubstringOccurrence(testData.textInFirstP, subs) +
|
||||
countSubstringOccurrence(testData.textInSecondP, subs))
|
||||
})
|
||||
|
||||
it('counter increase and decrease correctly', function() {
|
||||
makeTestParagraphs()
|
||||
openSearchBoxByShortcut()
|
||||
let subs = 'te'
|
||||
sendKeysToFindInput(subs)
|
||||
let matchesElement = getMatchesElement()
|
||||
let matchesCount = countSubstringOccurrence(testData.textInFirstP, subs) +
|
||||
countSubstringOccurrence(testData.textInSecondP, subs)
|
||||
checkMatchesElement(matchesElement, matchesCount > 0 ? 1 : 0, matchesCount)
|
||||
let nextOccurrenceButton = getNextOccurrenceButton()
|
||||
let prevOccurrenceButton = getPrevOccurrenceButton()
|
||||
clickOn(nextOccurrenceButton)
|
||||
checkMatchesElement(matchesElement, matchesCount > 1 ? 2 : 1, matchesCount)
|
||||
clickOn(prevOccurrenceButton)
|
||||
checkMatchesElement(matchesElement, 1, matchesCount)
|
||||
clickOn(prevOccurrenceButton)
|
||||
checkMatchesElement(matchesElement, matchesCount, matchesCount)
|
||||
})
|
||||
|
||||
it('matches count changes correctly after replace', function() {
|
||||
makeTestParagraphs()
|
||||
openSearchBoxByShortcut()
|
||||
let textToFind = 'te'
|
||||
sendKeysToFindInput(textToFind)
|
||||
let matchesElement = getMatchesElement()
|
||||
let matchesCount = countSubstringOccurrence(testData.textInFirstP, textToFind) +
|
||||
countSubstringOccurrence(testData.textInSecondP, textToFind)
|
||||
sendKeysToReplaceInput('ABC')
|
||||
let replaceButton = getReplaceButton()
|
||||
clickOn(replaceButton)
|
||||
checkMatchesElement(matchesElement, 1, matchesCount - 1)
|
||||
clickOn(getPrevOccurrenceButton())
|
||||
clickOn(replaceButton)
|
||||
checkMatchesElement(matchesElement, 1, matchesCount - 2)
|
||||
})
|
||||
|
||||
it('replace all works correctly', function() {
|
||||
makeTestParagraphs()
|
||||
openSearchBoxByShortcut()
|
||||
let textToFind = 'te'
|
||||
sendKeysToFindInput(textToFind)
|
||||
let matchesElement = getMatchesElement()
|
||||
let matchesCount = countSubstringOccurrence(testData.textInFirstP, textToFind) +
|
||||
countSubstringOccurrence(testData.textInSecondP, textToFind)
|
||||
sendKeysToReplaceInput('ABC')
|
||||
let replaceAllButton = getReplaceAllButton()
|
||||
clickOn(replaceAllButton)
|
||||
checkMatchesElement(matchesElement, 0, 0)
|
||||
})
|
||||
})
|
||||
Loading…
Reference in a new issue