Add tests and improve testing experience
This commit is contained in:
parent
5fc811e797
commit
5ce99a5a3d
3 changed files with 111 additions and 7 deletions
|
|
@ -23,7 +23,7 @@ const baseUrl = "http://localhost:" & $port & "/"
|
|||
template withBackend(body: untyped): untyped =
|
||||
## Starts a new backend instance.
|
||||
|
||||
spawn runProcess("nimble -y runbackend")
|
||||
spawn runProcess("nimble -y testbackend")
|
||||
defer:
|
||||
discard execCmd("killall " & backend)
|
||||
|
||||
|
|
@ -46,6 +46,8 @@ template withBackend(body: untyped): untyped =
|
|||
import browsertests/[scenario1, threads, issue181, categories]
|
||||
|
||||
proc main() =
|
||||
# Kill any already running instances
|
||||
discard execCmd("killall geckodriver")
|
||||
spawn runProcess("geckodriver -p 4444 --log config")
|
||||
defer:
|
||||
discard execCmd("killall geckodriver")
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import unittest, options, common
|
||||
import unittest, options, common, os
|
||||
|
||||
import webdriver
|
||||
|
||||
|
|
@ -43,6 +43,65 @@ proc categoriesUserTests(session: Session, baseUrl: string) =
|
|||
|
||||
ensureExists title, LinkTextSelector
|
||||
|
||||
test "can navigate to categories page":
|
||||
with session:
|
||||
click "#categories-btn"
|
||||
|
||||
ensureExists "#categories-list"
|
||||
|
||||
test "can view post under category":
|
||||
with session:
|
||||
|
||||
# create a few threads
|
||||
click "#new-thread-btn"
|
||||
sendKeys "#thread-title", "Post 1"
|
||||
|
||||
selectCategory "fun"
|
||||
sendKeys "#reply-textarea", "Post 1"
|
||||
|
||||
click "#create-thread-btn"
|
||||
navigate baseUrl
|
||||
|
||||
|
||||
click "#new-thread-btn"
|
||||
sendKeys "#thread-title", "Post 2"
|
||||
|
||||
selectCategory "announcements"
|
||||
sendKeys "#reply-textarea", "Post 2"
|
||||
|
||||
click "#create-thread-btn"
|
||||
navigate baseUrl
|
||||
|
||||
|
||||
click "#new-thread-btn"
|
||||
sendKeys "#thread-title", "Post 3"
|
||||
|
||||
selectCategory "default"
|
||||
sendKeys "#reply-textarea", "Post 3"
|
||||
|
||||
click "#create-thread-btn"
|
||||
navigate baseUrl
|
||||
|
||||
|
||||
click "#categories-btn"
|
||||
ensureExists "#categories-list"
|
||||
|
||||
click "#category-default"
|
||||
checkText "#threads-list .thread-title", "Post 3"
|
||||
for element in session.waitForElements("#threads-list .category-name"):
|
||||
# Have to user "innerText" because elements are hidden on this page
|
||||
assert element.getProperty("innerText") == "Default"
|
||||
|
||||
selectCategory "announcements"
|
||||
checkText "#threads-list .thread-title", "Post 2"
|
||||
for element in session.waitForElements("#threads-list .category-name"):
|
||||
assert element.getProperty("innerText") == "Announcements"
|
||||
|
||||
selectCategory "fun"
|
||||
checkText "#threads-list .thread-title", "Post 1"
|
||||
for element in session.waitForElements("#threads-list .category-name"):
|
||||
assert element.getProperty("innerText") == "Fun"
|
||||
|
||||
session.logout()
|
||||
|
||||
proc categoriesAdminTests(session: Session, baseUrl: string) =
|
||||
|
|
@ -76,6 +135,17 @@ proc categoriesAdminTests(session: Session, baseUrl: string) =
|
|||
|
||||
checkText "#category-selection .selected-category", name
|
||||
|
||||
test "category adding disabled on admin logout":
|
||||
with session:
|
||||
navigate(baseUrl & "c/0")
|
||||
ensureExists "#add-category"
|
||||
logout()
|
||||
|
||||
checkIsNone "#add-category"
|
||||
navigate baseUrl
|
||||
|
||||
login "admin", "admin"
|
||||
|
||||
session.logout()
|
||||
|
||||
proc test*(session: Session, baseUrl: string) =
|
||||
|
|
@ -84,4 +154,4 @@ proc test*(session: Session, baseUrl: string) =
|
|||
categoriesUserTests(session, baseUrl)
|
||||
categoriesAdminTests(session, baseUrl)
|
||||
|
||||
session.navigate(baseUrl)
|
||||
session.navigate(baseUrl)
|
||||
|
|
|
|||
|
|
@ -8,13 +8,22 @@ const actionDelayMs {.intdefine.} = 0
|
|||
macro with*(obj: typed, code: untyped): untyped =
|
||||
## Execute a set of statements with an object
|
||||
expectKind code, nnkStmtList
|
||||
result = code
|
||||
|
||||
template checkCompiles(res, default) =
|
||||
when compiles(res):
|
||||
res
|
||||
else:
|
||||
default
|
||||
|
||||
result = code.copy
|
||||
|
||||
# Simply inject obj into call
|
||||
for i in 0 ..< result.len:
|
||||
if result[i].kind in {nnkCommand, nnkCall}:
|
||||
if result[i].kind in {nnkCommand, nnkCall} and $result[i][0].toStrLit != "assert":
|
||||
result[i].insert(1, obj)
|
||||
|
||||
result = getAst(checkCompiles(result, code))
|
||||
|
||||
proc elementIsSome(element: Option[Element]): bool =
|
||||
return element.isSome
|
||||
|
||||
|
|
@ -73,8 +82,31 @@ proc waitForElement*(
|
|||
sleep(actionDelayMs)
|
||||
|
||||
while true:
|
||||
let loading = session.findElement(selector, strategy)
|
||||
if waitCondition(loading):
|
||||
try:
|
||||
let loading = session.findElement(selector, strategy)
|
||||
if waitCondition(loading):
|
||||
return loading
|
||||
finally:
|
||||
discard
|
||||
sleep(pollTime)
|
||||
waitTime += pollTime
|
||||
|
||||
if waitTime > timeout:
|
||||
doAssert false, "Wait for load time exceeded"
|
||||
|
||||
proc waitForElements*(
|
||||
session: Session, selector: string, strategy=CssSelector,
|
||||
timeout=20000, pollTime=50
|
||||
): seq[Element] =
|
||||
var waitTime = 0
|
||||
|
||||
when actionDelayMs > 0:
|
||||
sleep(actionDelayMs)
|
||||
|
||||
while true:
|
||||
let loading = session.findElements(selector, strategy)
|
||||
echo loading
|
||||
if loading.len > 0:
|
||||
return loading
|
||||
sleep(pollTime)
|
||||
waitTime += pollTime
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue