Skip to content

Commit

Permalink
Added core selenium testdeck-based tests
Browse files Browse the repository at this point in the history
  • Loading branch information
DarwisNarvaezDev committed Dec 19, 2023
1 parent 9772993 commit dba023f
Show file tree
Hide file tree
Showing 6 changed files with 98 additions and 5 deletions.
Original file line number Diff line number Diff line change
@@ -1,23 +1,50 @@
package org.rundeck.tests.functional.selenium.aceEditor

import org.rundeck.tests.functional.selenium.pages.EditNodesPage
import org.rundeck.tests.functional.selenium.pages.LoginPage
import org.rundeck.tests.functional.selenium.pages.ProjectHomePage
import org.rundeck.tests.functional.selenium.pages.ProjectListPage
import org.rundeck.util.annotations.SeleniumCoreTest
import org.rundeck.util.container.SeleniumBase

import java.util.stream.Collectors

@SeleniumCoreTest
class AceEditorSpec extends SeleniumBase{

private static def projectName = 'resourcesTest'

def setupSpec(){
setupProjectWithNodes(projectName, "/projects-import/resourcesTest.zip")
}

def "Edit json file resource model with indented text"(){

// 1. Logs, create a project
// 2. Adds a json file resource model
// 3. Attempt to edit the file, test the ace editor rendered lines based on JSON text (must be > 1).
// 1. Upload a project with a (json) file resource model created
// 2. Attempt to modify the file (Ace Editor rendered into view)
// Asserts the JSON is indented.

setup:
String projectName = projectName
LoginPage loginPage = page LoginPage
ProjectHomePage projectHomePage = page ProjectHomePage
EditNodesPage editNodesPage = page EditNodesPage
editNodesPage.setProject(projectName)

when:
loginPage.go()
loginPage.login(TEST_USER, TEST_PASS)
page(ProjectListPage).waitUntilPageLoaded()
projectHomePage.goProjectHome(projectName)
editNodesPage.go()
editNodesPage.waitUntilPageLoaded()
editNodesPage.modifyResourceButtonElement().click()
def linesInAceGutter = editNodesPage.aceGutterElement().getText()
List<String> linesAsList = Arrays.stream(linesInAceGutter.split("\\n"))
.collect(Collectors.toList());

then:

linesAsList.size() > 1

}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package org.rundeck.tests.functional.selenium.pages

import org.openqa.selenium.By
import org.openqa.selenium.WebElement
import org.rundeck.util.container.SeleniumContext

class EditNodesPage extends BasePage{

static final String PAGE_PATH = "/nodes/sources"
String project

By modifyResourceButton = By.partialLinkText("Modify")
By aceEditorGutter = By.xpath("//div[contains(@class, 'ace_layer') and contains(@class, 'ace_gutter-layer') and contains(@class, 'ace_folding-enabled')]")

/**
* Create a new page
* @param context
*/
EditNodesPage(SeleniumContext context) {
super(context)
}

@Override
String getLoadPath() {
if(!project){
throw new IllegalStateException("project is not set, cannot load nodes.")
}
return "/project/${project}${PAGE_PATH}"
}

WebElement modifyResourceButtonElement(){
el modifyResourceButton
}

WebElement aceGutterElement(){
el aceEditorGutter
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,19 @@ abstract class BaseContainer extends Specification implements ClientProvider {
}
}

void setupProjectWithNodes(String name, String projectImportLocation) {
def getProject = client.doGet("/project/${name}")
if (getProject.code() == 404) {
def post = client.doPost("/projects", [name: name])
if (!post.successful) {
throw new RuntimeException("Failed to create project: ${post.body().string()}")
}
client.doPut("/project/${name}/import?importConfig=true&importACL=true&importNodesSources=true", new File(getClass().getResource(projectImportLocation).getPath()))
}else if(getProject.code() == 200){
client.doPut("/project/${name}/import?importConfig=true&importACL=true&importNodesSources=true", new File(getClass().getResource(projectImportLocation).getPath()))
}
}

RdClient _client
@Override
RdClient getClient() {
Expand Down Expand Up @@ -145,4 +158,5 @@ abstract class BaseContainer extends Specification implements ClientProvider {
def setupSpec() {
startEnvironment()
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,5 @@ services:
- "/etc/localtime:/etc/localtime:ro"
- "/etc/timezone:/etc/timezone:ro"
- "../../../tokens.properties:/home/rundeck/server/config/tokens.properties"
- "../../../realm.properties:/home/rundeck/server/config/realm.properties"
- "../../../realm.properties:/home/rundeck/server/config/realm.properties"
- "../../../resource-model:/home/rundeck/server/config/resource-model"
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"test-node": {
"nodename": "test-node",
"customEnv": "test",
"hostname": "http://localhost:4443",
"editUrl": "http://localhost:4443",
"customIdx": "01",
"osFamily": "Linux",
"username": "rundeck",
"tags": "test"
}
}

0 comments on commit dba023f

Please sign in to comment.