Skip to content

Commit

Permalink
small improvements
Browse files Browse the repository at this point in the history
  • Loading branch information
dtuchs committed Aug 17, 2024
1 parent b4f42a9 commit 6ea5480
Show file tree
Hide file tree
Showing 23 changed files with 101 additions and 49 deletions.
3 changes: 3 additions & 0 deletions .github/workflows/e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@ jobs:
FRONT: niffler-ng-client
ALLURE_DOCKER_API: ${{ secrets.ALLURE_DOCKER_API }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BUILD_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
HEAD_COMMIT_MESSAGE: ${{ github.event.pull_request.head.sha || github.sha }}
EXECUTION_TYPE: github
run: |
: # build backends with profile `docker`, only for testing
bash ./gradlew jibDockerBuild -x :niffler-e-2-e-tests:test || exit 1
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -387,7 +387,7 @@ User-MacBook-Pro niffler % bash docker-compose-e2e.sh gql

#### 3. Selenoid UI доступен по адресу: http://localhost:9090/

#### 4. Allure доступен по адресу: http://localhost:5050/allure-docker-service/projects/niffler/reports/latest/index.html
#### 4. Allure доступен по адресу: http://localhost:5050/allure-docker-service/projects/niffler-ng/reports/latest/index.html

#### 5. OpenAPI (Swagger) доступен по адресу: http://localhost:8090/swagger-ui/index.html

Expand Down
1 change: 1 addition & 0 deletions docker-compose-e2e.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ source ./docker.properties
export PROFILE=docker
export PREFIX="${IMAGE_PREFIX}"
export ALLURE_DOCKER_API=http://allure:5050/
export HEAD_COMMIT_MESSAGE="local build"
export ARCH=$(uname -m)

echo '### Java version ###'
Expand Down
8 changes: 7 additions & 1 deletion docker-compose.test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -163,9 +163,15 @@ services:
DOCKER: eclipse-temurin:21-jdk
ALLURE_DOCKER_API: ${ALLURE_DOCKER_API}
GITHUB_TOKEN: ${GITHUB_TOKEN}
BUILD_URL: ${BUILD_URL}
HEAD_COMMIT_MESSAGE: ${HEAD_COMMIT_MESSAGE}
EXECUTION_TYPE: ${EXECUTION_TYPE}
environment:
- ALLURE_DOCKER_API=${ALLURE_DOCKER_API}
- GITHUB_TOKEN=${GITHUB_TOKEN}
- BUILD_URL=${BUILD_URL}
- HEAD_COMMIT_MESSAGE=${HEAD_COMMIT_MESSAGE}
- EXECUTION_TYPE=${EXECUTION_TYPE}
depends_on:
frontend.niffler.dc:
condition: service_started
Expand All @@ -178,7 +184,7 @@ services:
depends_on:
- niffler-e-2-e
environment:
CHECK_RESULTS_EVERY_SECONDS: 3
CHECK_RESULTS_EVERY_SECONDS: NONE
KEEP_HISTORY: 1
ports:
- 5050:5050
Expand Down
6 changes: 6 additions & 0 deletions niffler-e-2-e-tests/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,11 +1,17 @@
ARG DOCKER
ARG ALLURE_DOCKER_API
ARG GITHUB_TOKEN
ARG BUILD_URL
ARG HEAD_COMMIT_MESSAGE
ARG EXECUTION_TYPE

FROM ${DOCKER}

ENV ALLURE_DOCKER_API=${ALLURE_DOCKER_API}
ENV GITHUB_TOKEN=${GITHUB_TOKEN}
ENV BUILD_URL=${BUILD_URL}
ENV HEAD_COMMIT_MESSAGE=${HEAD_COMMIT_MESSAGE}
ENV EXECUTION_TYPE=${EXECUTION_TYPE}

WORKDIR /niffler
COPY ./gradle ./gradle
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,15 @@ Call<JsonNode> uploadResults(@Query("project_id") String projectId,
@GET("allure-docker-service/projects/{project_id}")
Call<JsonNode> project(@Path("project_id") String projectId);

@GET("allure-docker-service/clean-results")
Call<JsonNode> cleanResults(@Query("project_id") String projectId);

@GET("allure-docker-service/generate-report")
Call<JsonNode> generateReport(@Query("project_id") String projectId,
@Query("execution_name") String executionName,
@Query(value = "execution_from", encoded = true) String executionFrom,
@Query("execution_type") String executionType);

@POST("allure-docker-service/projects")
Call<JsonNode> createProject(@Body AllureProject project);
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,17 @@ public AllureDockerApiClient() {
this.allureDockerApi = retrofit.create(AllureDockerApi.class);
}

public void clean(String projectId) throws IOException {
allureDockerApi.cleanResults(projectId).execute();
}

public void generateReport(String projectId,
String executionName,
String executionFrom,
String executionType) throws IOException {
allureDockerApi.generateReport(projectId, executionName, executionFrom, executionType).execute();
}

public void sendResultsToAllure(String projectId, AllureResults allureResults) throws IOException {
int code = allureDockerApi.uploadResults(
projectId,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package guru.qa.niffler.jupiter.annotation.meta;

import guru.qa.niffler.jupiter.extension.ClearCookiesExtension;
import guru.qa.niffler.jupiter.extension.DatabaseCreateUserExtension;
import guru.qa.niffler.jupiter.extension.GqlReqResolver;
import io.qameta.allure.junit5.AllureJunit5;
Expand All @@ -16,7 +15,6 @@
@ExtendWith({
DatabaseCreateUserExtension.class,
GqlReqResolver.class,
ClearCookiesExtension.class,
AllureJunit5.class})
public @interface GqlTest {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package guru.qa.niffler.jupiter.annotation.meta;

import guru.qa.niffler.jupiter.extension.ClearCookiesExtension;
import guru.qa.niffler.jupiter.extension.DatabaseCreateUserExtension;
import guru.qa.niffler.jupiter.extension.KafkaExtension;
import io.qameta.allure.junit5.AllureJunit5;
Expand All @@ -16,7 +15,6 @@
@ExtendWith({
KafkaExtension.class,
DatabaseCreateUserExtension.class,
ClearCookiesExtension.class,
AllureJunit5.class
})
public @interface KafkaTest {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package guru.qa.niffler.jupiter.annotation.meta;

import guru.qa.niffler.jupiter.extension.ClearCookiesExtension;
import guru.qa.niffler.jupiter.extension.DatabaseCreateUserExtension;
import io.qameta.allure.junit5.AllureJunit5;
import org.junit.jupiter.api.extension.ExtendWith;
Expand All @@ -14,7 +13,6 @@
@Target(ElementType.TYPE)
@ExtendWith({
DatabaseCreateUserExtension.class,
ClearCookiesExtension.class,
AllureJunit5.class
})
public @interface RestTest {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package guru.qa.niffler.jupiter.annotation.meta;

import guru.qa.niffler.jupiter.extension.ClearCookiesExtension;
import guru.qa.niffler.jupiter.extension.DatabaseCreateUserExtension;
import io.qameta.allure.junit5.AllureJunit5;
import org.junit.jupiter.api.extension.ExtendWith;
Expand All @@ -14,7 +13,6 @@
@Target(ElementType.TYPE)
@ExtendWith({
DatabaseCreateUserExtension.class,
ClearCookiesExtension.class,
AllureJunit5.class
})
public @interface SoapTest {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import guru.qa.niffler.jupiter.extension.ApiLoginExtension;
import guru.qa.niffler.jupiter.extension.BrowserExtension;
import guru.qa.niffler.jupiter.extension.ClearCookiesExtension;
import guru.qa.niffler.jupiter.extension.DatabaseCreateUserExtension;
import io.qameta.allure.junit5.AllureJunit5;
import org.junit.jupiter.api.extension.ExtendWith;
Expand All @@ -18,7 +17,6 @@
BrowserExtension.class,
DatabaseCreateUserExtension.class,
ApiLoginExtension.class,
ClearCookiesExtension.class,
AllureJunit5.class
})
public @interface WebTest {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import guru.qa.niffler.api.AllureDockerApiClient;
import guru.qa.niffler.model.allure.AllureResults;
import guru.qa.niffler.model.allure.DecodedAllureFile;
import lombok.SneakyThrows;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand All @@ -25,6 +27,15 @@ public class AllureDockerExtension implements SuiteExtension {

private static final AllureDockerApiClient allureDockerApiClient = new AllureDockerApiClient();

@Override
@SneakyThrows
public void beforeSuite(ExtensionContext context) {
if ("docker".equals(System.getProperty("test.env"))) {
allureDockerApiClient.createProjectIfNotExist(projectId);
allureDockerApiClient.clean(projectId);
}
}

@Override
public void afterSuite() {
if ("docker".equals(System.getProperty("test.env"))) {
Expand All @@ -48,6 +59,12 @@ public void afterSuite() {
filesToSend
)
);
allureDockerApiClient.generateReport(
projectId,
System.getenv("HEAD_COMMIT_MESSAGE"),
System.getenv("BUILD_URL"),
System.getenv("EXECUTION_TYPE")
);
} catch (IOException e) {
throw new RuntimeException(e);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,13 +78,20 @@ public void beforeEach(ExtensionContext context) throws Exception {
}
setCodeVerifier(context, OauthUtils.codeVerifier());
setCodeChallenge(context, OauthUtils.codeChallenge(getCodeVerifier(context)));
authClient.login(context, userToLogin.username(), userToLogin.testData().password());

if (setUpBrowser) {
Selenide.open(CFG.frontUrl());
Selenide.localStorage().setItem("id_token", getToken(context));
WebDriverRunner.getWebDriver().manage().addCookie(getJsessionIdCookie());
Selenide.open(CFG.frontUrl(), MainPage.class).waitForPageLoaded();
try {
authClient.login(context, userToLogin.username(), userToLogin.testData().password());
if (setUpBrowser) {
Selenide.open(CFG.frontUrl());
Selenide.localStorage().setItem("id_token", getToken(context));
WebDriverRunner.getWebDriver().manage().addCookie(getJsessionIdCookie());
Selenide.open(MainPage.URL, MainPage.class)
.waitForPageLoaded();
}
} catch (Exception e) {
BrowserExtension.doScreen();
throw e;
} finally {
ThreadLocalCookieStore.INSTANCE.removeAll();
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,25 +19,19 @@ public class BrowserExtension implements

@Override
public void handleTestExecutionException(ExtensionContext context, Throwable throwable) throws Throwable {
if (WebDriverRunner.hasWebDriverStarted()) {
doScreen();
}
doScreen();
throw throwable;
}

@Override
public void handleBeforeEachMethodExecutionException(ExtensionContext context, Throwable throwable) throws Throwable {
if (WebDriverRunner.hasWebDriverStarted()) {
doScreen();
}
doScreen();
throw throwable;
}

@Override
public void handleAfterEachMethodExecutionException(ExtensionContext context, Throwable throwable) throws Throwable {
if (WebDriverRunner.hasWebDriverStarted()) {
doScreen();
}
doScreen();
throw throwable;
}

Expand All @@ -48,9 +42,11 @@ public void afterEach(ExtensionContext context) {
}
}

private void doScreen() {
Allure.addAttachment("Screenshot on fail",
new ByteArrayInputStream(((TakesScreenshot) WebDriverRunner.getWebDriver())
.getScreenshotAs(OutputType.BYTES)));
static void doScreen() {
if (WebDriverRunner.hasWebDriverStarted()) {
Allure.addAttachment("Screenshot on fail",
new ByteArrayInputStream(((TakesScreenshot) WebDriverRunner.getWebDriver())
.getScreenshotAs(OutputType.BYTES)));
}
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
package guru.qa.niffler.jupiter.extension;

import guru.qa.niffler.api.service.ThreadLocalCookieStore;
import org.junit.jupiter.api.extension.AfterTestExecutionCallback;
import org.junit.jupiter.api.extension.AfterEachCallback;
import org.junit.jupiter.api.extension.ExtensionContext;

public class ClearCookiesExtension implements AfterTestExecutionCallback {

public class CookiesExtension implements AfterEachCallback {
@Override
public void afterTestExecution(ExtensionContext context) {
public void afterEach(ExtensionContext context) throws Exception {
ThreadLocalCookieStore.INSTANCE.removeAll();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,11 @@ public class RestCreateUserExtension extends AbstractCreateUserExtension {
@Nonnull
protected UserJson createUser(@Nonnull String username,
@Nonnull String password) throws Exception {
authClient.register(username, password);
ThreadLocalCookieStore.INSTANCE.removeAll();
try {
authClient.register(username, password);
} finally {
ThreadLocalCookieStore.INSTANCE.removeAll();
}
UserJson currentUser = waitWhileUserToBeConsumed(username, 10000L);
return currentUser.addTestData(new TestData(password));
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package guru.qa.niffler.page;

import com.codeborne.selenide.ClickOptions;
import com.codeborne.selenide.Condition;
import com.codeborne.selenide.SelenideElement;
import guru.qa.niffler.page.component.SearchField;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package guru.qa.niffler.page.component;

import com.codeborne.selenide.ClickOptions;
import com.codeborne.selenide.ElementsCollection;
import com.codeborne.selenide.SelenideElement;
import guru.qa.niffler.model.rest.DataFilterValues;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package guru.qa.niffler.test.kafka;

import guru.qa.niffler.api.AuthApiClient;
import guru.qa.niffler.api.service.ThreadLocalCookieStore;
import guru.qa.niffler.kafka.KafkaConsumer;
import guru.qa.niffler.model.rest.UserJson;
import guru.qa.niffler.utils.DataUtils;
Expand Down Expand Up @@ -28,7 +29,12 @@ void messageShouldBeProducedToKafkaAfterSuccessfulRegistration() throws Exceptio
final String username = DataUtils.generateRandomUsername();
final String password = DataUtils.generateRandomPassword();

authClient.register(username, password);
try {
authClient.register(username, password);
} finally {
ThreadLocalCookieStore.INSTANCE.removeAll();
}

final UserJson messageFromKafka = KafkaConsumer.getMessage(username, 10000L);

step("Check that message from kafka exist", () ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
import io.qameta.allure.AllureId;
import io.qameta.allure.Epic;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.RepeatedTest;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
guru.qa.niffler.jupiter.extension.ContextHolderExtension
guru.qa.niffler.jupiter.extension.CookiesExtension
guru.qa.niffler.jupiter.extension.JpaExtension
guru.qa.niffler.jupiter.extension.AllureDockerExtension
14 changes: 7 additions & 7 deletions niffler-ng-client/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,13 @@ If you are developing a production application, we recommend updating the config

```js
export default {
// other rules...
parserOptions: {
ecmaVersion: 'latest',
sourceType: 'module',
project: ['./tsconfig.json', './tsconfig.node.json'],
tsconfigRootDir: __dirname,
},
// other rules...
parserOptions: {
ecmaVersion: 'latest',
sourceType: 'module',
project: ['./tsconfig.json', './tsconfig.node.json'],
tsconfigRootDir: __dirname,
},
}
```

Expand Down

0 comments on commit 6ea5480

Please sign in to comment.