Repository navigation
Expand file tree
/
Copy pathMockFlowTest.java
More file actions
113 lines (98 loc) · 3.93 KB
/
Copy pathMockFlowTest.java
File metadata and controls
113 lines (98 loc) · 3.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package com.DesktopApplicationClientJava.ui;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import com.DesktopApplicationClientJava.controllers.ResourceDetailsController;
import com.DesktopApplicationClientJava.entities.FileInfo;
import com.DesktopApplicationClientJava.navigation.Navigator;
import com.DesktopApplicationClientJava.services.ServiceRegistry;
import com.DesktopApplicationClientJava.session.Session;
import com.DesktopApplicationClientJava.utils.ControllerWiring;
import io.qameta.allure.Epic;
import io.qameta.allure.Feature;
import java.util.UUID;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TableView;
import javafx.stage.Stage;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
import org.testfx.api.FxToolkit;
/**
* Mock-backed UI flow: real pages wired to real in-memory mock services (no Mockito on services, no
* backend). Proves that MOCK_DATA mode renders actual data.
*/
@Epic("Ресурс")
@Feature("Просмотр метаданных ресурса")
@Tag("role:user")
@DisplayName("Просмотр ресурса на моках")
class MockFlowTest extends FxTestBase {
private static final UUID SEEDED_RESOURCE_ID =
UUID.fromString("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa");
private ResourceDetailsController controller;
@BeforeEach
void resetScene() throws Exception {
FxToolkit.setupStage(
stage -> {
try {
start(stage);
} catch (Exception e) {
throw new RuntimeException(e);
}
});
}
void start(Stage stage) throws Exception {
Navigator navigator = mockNavigator();
ServiceRegistry services = ServiceRegistry.mock(new Session());
FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/ResourceDetails.fxml"));
loader.setControllerFactory(
clazz -> {
try {
Object created = clazz.getDeclaredConstructor().newInstance();
ControllerWiring.wire(created, navigator, new Session(), services);
return created;
} catch (Exception e) {
throw new RuntimeException("Cannot create controller: " + clazz, e);
}
});
Parent root = loader.load();
controller = loader.getController();
stage.setScene(new Scene(root));
stage.show();
}
@Test
void mockLoginPutsUserIntoSession() {
Session session = new Session();
ServiceRegistry registry = ServiceRegistry.mock(session);
registry.getAuthService().login("admin@example.com", "any-password");
assertEquals("admin@example.com", session.getCurrentUser().getEmail());
}
@Test
@SuppressWarnings("unchecked")
@DisplayName("Страница показывает мок-ресурс из памяти")
void detailsPageRendersSeededMockResource() {
robot.interact(
() -> {
controller.setResourceId(SEEDED_RESOURCE_ID);
controller.load();
});
assertEquals("Годовой отчёт (мок)", robot.lookup("#titleLabel").queryAs(Label.class).getText());
TableView<FileInfo> table = robot.lookup("#filesTable").queryAs(TableView.class);
assertEquals(2, table.getItems().size());
assertFalse(robot.lookup("#errorLabel").queryAs(Label.class).isVisible());
}
@Test
@SuppressWarnings("unchecked")
void detailsPageAutoSelectsFirstSeedWithoutId() {
robot.interact(() -> controller.load());
assertEquals("Годовой отчёт (мок)", robot.lookup("#titleLabel").queryAs(Label.class).getText());
TableView<FileInfo> table = robot.lookup("#filesTable").queryAs(TableView.class);
assertEquals(2, table.getItems().size());
}
private static Navigator mockNavigator() {
return org.mockito.Mockito.mock(Navigator.class);
}
}