Giter Site home page Giter Site logo

qa-diploma's People

Contributors

coursar avatar falkona avatar

Watchers

 avatar  avatar  avatar

qa-diploma's Issues

Корректировки плана

  1. Сценарии
  • В сценариях, где проверяется прошедшие месяц/год, вероятно, проверка должна проходить не на фронтенде, а на бекенде, потому что, обычно, логические вычисления/проверки проводят именно на сервисе, чтобы не влиять на производительность вашего компьютера, а на фронтенде проводят лишь первичную валидацию.
  • В 11 сценарии опечатались: вы проверяете кейс без номера карты, а ожидаете ошибку по владельцу.
  • Можно еще добавить кейс с отправкой номера карты, которого нет в списке тестовых данных. Интересно, как в таком случае поведет себя сервис.
  1. Инструменты
  • Можно объединить Библиотеки и Отчетность в Инструменты и добавить туда еще язык программирования, хранилище кода.
  • По заданию необходимо написать обоснование выбора инструмента. По сути, выбора у нас нет, но если бы и был, то выбирать пришлось бы - напишите сильные, на ваш взгляд, стороны выбранных инструментов.
  1. Риски
  • Что вы имели в виду под низкой продуктивностью? Вашу продуктивность? Если да, то так не пойдет. Заказчика не очень будет интересовать, в какой стадии у вас луна или какова мощность магнитных бурь. Либо вы имели в виду не вашу продуктивность, а в более общем смысле? Тогда это слишком обобщенно, нужно расписать риски более детально, от чего может зависеть общая продуктивность.
  • Что еще можно учесть. Вам предстоит проверить работу приложения с двумя базами данных (mysql/postgres). Вы подумали над стратегией, как это организовать? Вероятно, могут возникнуть проблемы с настройкой такой инфраструктуры - это риск.
  • У вас нет документации с требованиями к сервису, к тому что должно пройти форму, а что не должно, где и какие проверки должны происходить. Если работа приложения не совпадет с ожидаемым вами, то вы можете потерять время на корректировку кейсов. Риск? Риск.
  1. Оценка
  • Оценку чаще всего пишут в человекочасах или человекоднях - сколько нужно времени (часов или дней по 8ч.) одному человеку для выполнения работы. Так становится более понятно, какая нужна команда для выполнения в нужный срок (при возможности одновременной работы нескольких человек).
  • В общем, оценили хорошо, но есть один момент. Риски, как правило, не превышают 25% от вашей оценки, поэтому к оценке "без рисков" можно добавить часы, чтобы риски не превышали 15-25%.
  • Еще можно отдельно прикинуть время на написание отчетности. Вам же не просто отчет allure сгенерить, вам еще нужно написать итоговый отчет с входными и выходными показателями.

Баг: после исправления значений остается подсветка полей как некорректных

Открыта форма Оплата по карте
Не заполняю никакие поля, нажимаю кнопку Продолжить. Все поля подсвечены, сообщение об ошибке "Неверный формат".
Заполняю все поля валидными значениями, нажимаю Продолжить.

ОР: все поля не подсвечены, сообщений об ошибке нет
ФР: поля Номер карты, Владелец, cvc остались подсвечены

image

В таблице order_entity заполняется поле payment_id вместо credit_id при покупке в кредит

Шаги:
Заполнить форму "Кредит по данным карты"

  • Номер карты: 4444444444444441
  • Дата: 08/22
  • cvc: 789
    Продолжить

ОР: созданы записи в таблицах order_entity, credit_request_entity, при этом order_entity.credit_id = credit_request_entity.bank_id
ФР: поле order_entity.credit_id = NULL, заполнено поле payment_id

mysql> select * from credit_request_entity;
+--------------------------------------+--------------------------------------+----------------------------+----------+
| id                                   | bank_id                              | created                    | status   |
+--------------------------------------+--------------------------------------+----------------------------+----------+
| 7225fdf9-4a14-4605-aced-1e48f404767f | 52af6c12-9fcb-4c24-88d5-f1f094a60749 | 2019-12-09 10:05:46.604000 | APPROVED |
+--------------------------------------+--------------------------------------+----------------------------+----------+

Ошибка при выполнении запроса DELETE You have an error in your SQL syntax

Создала новую ветку, https://github.com/falkona/qa-diploma/tree/feature/shortCleanTables
В ней отредактировала метод cleanTables()

public static void cleanTables() throws SQLException {
        String deleteOrderEntity = "delete from order_entity; delete from payment_entity; delete from credit_request_entity;";

        try (
                Connection connection = DriverManager.getConnection(getUrl(), getUser(), getPassword());
                PreparedStatement statementOrderEntity = connection.prepareStatement(deleteOrderEntity);
        ) {
            statementOrderEntity.executeUpdate();
        }
    }

Когда я выполняю запрос на удаление в терминале MySQL, все работает
При этом тесты падают с ошибкой

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'delete from payment_entity; delete from credit_request_entity' at line 1
java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'delete from payment_entity; delete from credit_request_entity' at line 1
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
	at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953)
	at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1092)
	at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1040)
	at com.mysql.cj.jdbc.ClientPreparedStatement.executeLargeUpdate(ClientPreparedStatement.java:1347)
	at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdate(ClientPreparedStatement.java:1025)
	at ru.netology.utils.SqlHelper.cleanTables(SqlHelper.java:20)
	at ru.netology.test.PurchaseTest.cleanTables(PurchaseTest.java:159)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:675)
	at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:125)
	at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:132)
	at org.junit.jupiter.engine.extension.TimeoutExtension.interceptLifecycleMethod(TimeoutExtension.java:111)
	at org.junit.jupiter.engine.extension.TimeoutExtension.interceptAfterEachMethod(TimeoutExtension.java:95)
	at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115)
	at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:104)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:62)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:43)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:35)
	at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104)
	at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeMethodInExtensionContext(ClassBasedTestDescriptor.java:464)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$synthesizeAfterEachMethodAdapter$17(ClassBasedTestDescriptor.java:454)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeAfterEachMethods$9(TestMethodTestDescriptor.java:228)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeAllAfterMethodsOrCallbacks$12(TestMethodTestDescriptor.java:256)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeAllAfterMethodsOrCallbacks$13(TestMethodTestDescriptor.java:256)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1540)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeAllAfterMethodsOrCallbacks(TestMethodTestDescriptor.java:255)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeAfterEachMethods(TestMethodTestDescriptor.java:226)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:139)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:69)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:135)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1540)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1540)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:220)
	at org.junit.platform.launcher.core.DefaultLauncher.lambda$execute$6(DefaultLauncher.java:188)
	at org.junit.platform.launcher.core.DefaultLauncher.withInterceptedStreams(DefaultLauncher.java:202)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:181)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:128)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:102)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:82)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:78)
	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:61)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
	at com.sun.proxy.$Proxy2.stop(Unknown Source)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.stop(TestWorker.java:132)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:175)
	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:157)
	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
	at java.base/java.lang.Thread.run(Thread.java:834)

Как фронт должен реагировать, если с бэка приходит код ответа 400?

Шаги:
Заполнить поля формы "Путешествие дня" значениями:

  • номер карты: 1234000000000000
  • месяц: 08
  • год: 22
  • владелец: Нос Дарья
  • cvc: 789

ОР: система оповещает пользователя, что номер карты не найден (?)
ФР: одновременно появляются нотификации "Успешно" и "Ошибка"

Параллельная работа mysql и postgres

Для работы с каждой БД я создала свою ветку, со своими значениями в application.properties.
При запуске SUT с одной записью, например

spring.datasource.url=jdbc:mysql://192.168.99.100:3306/app

все работает нормально, и для mysql, и для posgres.

Потом я попробовала это все соединить в master, и файл application.properties стал выглядеть так

spring.credit-gate.url=http://192.168.99.100:9999/credit
spring.payment-gate.url=http://192.168.99.100:9999/payment
spring.datasource.url=jdbc:postgresql://192.168.99.100:5432/app
spring.datasource.url=jdbc:mysql://192.168.99.100:3306/app
spring.datasource.username=app
spring.datasource.password=pass

После запуска SUT в базе mysql были созданы таблицы, а в базе postgres - нет. Это баг или я что-то сделала неправильно? Лог запуска SUT

2019-12-12 09:03:52.892  INFO 13048 --- [           main] ru.netology.shop.ShopApplication         : Starting ShopApplication v0.0.1-SNAPSHOT on DESKTOP-FB81I61 with PID 13048 (C:\Users\skype\netology\qa-di
ploma\artifacts\aqa-shop.jar started by skype in C:\Users\skype\netology\qa-diploma\artifacts)
2019-12-12 09:03:52.895  INFO 13048 --- [           main] ru.netology.shop.ShopApplication         : No active profile set, falling back to default profiles: default
2019-12-12 09:03:53.688  INFO 13048 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data repositories in DEFAULT mode.
2019-12-12 09:03:53.769  INFO 13048 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 70ms. Found 3 repository interfaces.
2019-12-12 09:03:54.167  INFO 13048 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.sp
ringframework.transaction.annotation.ProxyTransactionManagementConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2019-12-12 09:03:55.106  INFO 13048 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2019-12-12 09:03:55.120  INFO 13048 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2019-12-12 09:03:55.120  INFO 13048 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.27]
2019-12-12 09:03:55.204  INFO 13048 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2019-12-12 09:03:55.205  INFO 13048 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 2248 ms
2019-12-12 09:03:55.429  INFO 13048 --- [           main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
2019-12-12 09:03:55.528  INFO 13048 --- [           main] org.hibernate.Version                    : HHH000412: Hibernate Core {5.4.8.Final}
2019-12-12 09:03:55.791  INFO 13048 --- [           main] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.1.0.Final}
2019-12-12 09:03:55.901  INFO 13048 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2019-12-12 09:03:56.828  INFO 13048 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2019-12-12 09:03:56.863  INFO 13048 --- [           main] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.MySQL8Dialect
2019-12-12 09:03:57.805  INFO 13048 --- [           main] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJt
aPlatform]
2019-12-12 09:03:57.813  INFO 13048 --- [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2019-12-12 09:03:58.265  WARN 13048 --- [           main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view r
endering. Explicitly configure spring.jpa.open-in-view to disable this warning
2019-12-12 09:03:58.438  INFO 13048 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2019-12-12 09:03:58.559  INFO 13048 --- [           main] o.s.b.a.w.s.WelcomePageHandlerMapping    : Adding welcome page: class path resource [static/index.html]
2019-12-12 09:03:58.724  INFO 13048 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2019-12-12 09:03:58.726  INFO 13048 --- [           main] ru.netology.shop.ShopApplication         : Started ShopApplication in 6.29 seconds (JVM running for 6.818)

В таблицу payment_entity записывается некорректная сумма

Шаги:
Заполнить форму "Путешествие дня" значениями:

  • Номер карты: 4444444444444441
  • Месяц: 08
  • Год: 23
  • Владелец: Дарья
  • сvc: 456
    Нажать Продолжить
    Выполнить запрос к БД
select * from payment_entity;

ОР: в поле amount значение соответствует тому, что указано на форме - 45 000 рублей
ФР: в поле amount значение - 4 500 000

mysql> select * from payment_entity;
+--------------------------------------+---------+----------------------------+----------+--------------------------------------+
| id                                   | amount  | created                    | status   | transaction_id                       |
+--------------------------------------+---------+----------------------------+----------+--------------------------------------+
| f184915a-2482-48d9-84b4-2469d9538e8b | 4500000 | 2019-12-09 09:59:00.227000 | APPROVED | 8876c99b-665f-4890-a7bc-7f5bc0fc61d1 |
+--------------------------------------+---------+----------------------------+----------+--------------------------------------+

Баг: некорректное сообщение об ошибке

Открыта форма Кредит по данным карты
Не заполняю поля, нажимаю Продолжить

ОР: сообщение об ошибке - Поле обязательно для заполнения
ФР: у всех полей, кроме поля Имя сообщение "Неверный формат"

image

Как проверить записи в БД

Отредактировала позитивные кейсы, добавила в них проверку, что при транзакции создается запись в БД. Вопрос: как определить, что в результате теста действительно была добавлена конкретная запись в БД? Там есть 2 идентификатора, которые непонятно как генерятся. Соответственно, непонятно, как искать нужную запись в БД.

Проблемы с кодировкой при поиске элемента

Запускаю тест PurchaseTest.shouldBeSuccessCurrentMonthAndYearPayment()
Кодировка файла PurchaseTest.java, Page.java - UTF-8
Падает на строке 14 в классе Page.java

@Getter protected SelenideElement paymentButton = $(byText("Купить")).parent().parent();

Ошибка

Element not found {by text: Купить}

Если выставить кодировку windows-1251, то все работает нормально

Баг: нет валидации поля Номер карты

Заполняю форму Оплата по карте
В поле Номер карты ввожу: 0000 0000 0000 0000

ОР: на форме происходит валидация, провека контрольной цифры, номер карты распознается как недействительный
ФР: валидации нет

image

Ошибка npm: command not found при попытке запуска симулятора

В папку gate-simulator добавила файлы Dockerfile и docker-compose.yml (их скопировала из д.з. по докеру).
Выполнила команду docker-compose up -d --build
далее

$ docker-compose up -d --build
Creating network "gate-simulator_default" with the default driver
Building node-app
Step 1/6 : FROM node:8.16.2-alpine
 ---> 26881633664e
Step 2/6 : WORKDIR /opt/app
 ---> Using cache
 ---> a6b3215da7d8
Step 3/6 : COPY . .
 ---> Using cache
 ---> 9f6ec9bc76de
Step 4/6 : RUN npm install
 ---> Using cache
 ---> a8acfd00af5e
Step 5/6 : CMD ["npm", "start"]
 ---> Using cache
 ---> 7b7f2eadba5a
Step 6/6 : EXPOSE 9999
 ---> Using cache
 ---> be2770099f64

Successfully built be2770099f64
Successfully tagged node-app:1.0
Creating gate-simulator_node-app_1 ... done

После этого выполняю команду npm start и получаю ошибку

$ npm start
bash: npm: command not found

при этом образ создан, контейнер запущен

$ docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
node-app            1.0                 be2770099f64        59 seconds ago      71.5MB
<none>              <none>              d3f7c75592fd        2 minutes ago       71.5MB
<none>              <none>              c10dc75dc916        50 minutes ago      75.1MB
postgres            latest              d5177924aea0        5 days ago          394MB
node                8                   c0eda5b3a935        9 days ago          895MB
mysql               latest              d435eee2caa5        9 days ago          456MB
node                8.16.2-alpine       26881633664e        12 days ago         67MB
postgres            12.0-alpine         5b681acb1cfc        5 weeks ago         72.8MB
$ docker-compose ps
▒▒▒⥬▒ ▒▒ 㤠▒▒▒▒ ▒▒▒▒ 㪠▒▒▒▒▒ ▒▒▒▒.
          Name                         Command               State           Ports
-------------------------------------------------------------------------------------------
gate-simulator_node-app_1   docker-entrypoint.sh npm start   Up      0.0.0.0:9999->9999/tcp

Баг: нет валидации поля Имя

Заполняю форму Оплата по карте
В поле Имя ввожу невалидные значения, например, цифру 1

ОР: есть валидация поля Имя (допускаются буквы, пробелы, дефис; цифры не допускаются)
ФР: нет валидации поля Имя

image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.