aboutsummaryrefslogtreecommitdiffstats
path: root/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/missioncontrol/controller/GuiTestApplication.java
blob: 968141e924b181e851dfd35c8efab14e76db26d1 (plain) (blame)
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
package at.ac.tuwien.sepm.assignment.groupphase.missioncontrol.controller;

import static org.mockito.Mockito.mock;

import at.ac.tuwien.sepm.assignment.groupphase.missioncontrol.service.EmployeeService;
import at.ac.tuwien.sepm.assignment.groupphase.missioncontrol.service.EmployeeServiceImpl;
import at.ac.tuwien.sepm.assignment.groupphase.missioncontrol.service.OperationService;
import at.ac.tuwien.sepm.assignment.groupphase.missioncontrol.service.OperationServiceImpl;
import at.ac.tuwien.sepm.assignment.groupphase.missioncontrol.service.RegistrationService;
import at.ac.tuwien.sepm.assignment.groupphase.missioncontrol.service.RegistrationServiceImpl;
import at.ac.tuwien.sepm.assignment.groupphase.missioncontrol.service.VehicleService;
import at.ac.tuwien.sepm.assignment.groupphase.missioncontrol.service.VehicleServiceImpl;
import at.ac.tuwien.sepm.assignment.groupphase.util.SpringFXMLLoader;
import java.lang.invoke.MethodHandles;
import javafx.application.Application;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;

@Component
@ComponentScan("at.ac.tuwien.sepm.assignment.groupphase")
public class GuiTestApplication extends Application {

    private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());

    public static AnnotationConfigApplicationContext context;

    @Configuration
    public static class ContextConfiguration {

        @Bean
        @Primary
        public EmployeeService employeeService() {
            return mock(EmployeeServiceImpl.class);
        }

        @Bean
        @Primary
        public VehicleService vehicleService() {
            return mock(VehicleServiceImpl.class);
        }

        @Bean
        @Primary
        public OperationService operationService() {
            return mock(OperationServiceImpl.class);
        }

        @Bean
        @Primary
        public RegistrationService registrationService() {
            return mock(RegistrationServiceImpl.class);
        }
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        // setup application
        primaryStage.setTitle("Test window");
        primaryStage.setWidth(1366);
        primaryStage.setHeight(768);
        primaryStage.centerOnScreen();
        primaryStage.setOnCloseRequest(event -> LOG.debug("Application shutdown initiated"));

        if (getParameters().getRaw().size() < 1) {
            throw new UnsupportedOperationException("FXML file not set");
        }

        context = new AnnotationConfigApplicationContext(GuiTestApplication.class);
        final var fxmlLoader = context.getBean(SpringFXMLLoader.class);
        primaryStage.setScene(
                new Scene(
                        (Parent)
                                fxmlLoader.load(
                                        getClass()
                                                .getResourceAsStream(
                                                        "/fxml/"
                                                                + getParameters()
                                                                        .getRaw()
                                                                        .get(0)))));

        // show application
        primaryStage.show();
        primaryStage.toFront();
        LOG.debug("Application startup complete");
    }

    @Override
    public void stop() {
        LOG.debug("Stopping application");
        context.close();
    }
}