Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ jobs:
java -jar ./ui/web/build/libs/web.jar &
chromedriver --url-base=/wd/hub &
sudo Xvfb -ac $DISPLAY -screen 0 1920x1080x24 > /dev/null 2>&1 &
./gradlew build
./gradlew -Pheadless=true build
./gradlew sonarqube
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Expand Down
10 changes: 10 additions & 0 deletions ui/desktop/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ dependencies {

testImplementation("org.junit.jupiter", "junit-jupiter-api", "5.7.2")
testRuntimeOnly("org.junit.jupiter", "junit-jupiter-engine")

testImplementation("org.testfx", "testfx-core", "4.0.16-alpha")
testImplementation("org.testfx", "testfx-junit5", "4.0.16-alpha")
testImplementation("org.testfx", "openjfx-monocle", "jdk-11+26")
}

javafx {
Expand All @@ -20,3 +24,9 @@ javafx {
application {
mainClass.set("com.ttbmp.cinehub.ui.desktop.CinehubApplication")
}

tasks.withType<Test>().all {
if (project.hasProperty("headless")) {
jvmArgs("-Djava.awt.headless=true -Dtestfx.robot=glass -Dtestfx.headless=true -Dprism.order=sw")
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
package com.ttbmp.cinehub.ui.desktop.buyticket;

import com.ttbmp.cinehub.ui.desktop.CinehubApplication;
import com.ttbmp.cinehub.ui.desktop.utilities.ui.navigation.NavActivityDestination;
import com.ttbmp.cinehub.ui.desktop.utilities.ui.navigation.NavController;
import javafx.scene.Node;
import javafx.scene.control.Button;
import javafx.scene.control.DatePicker;
import javafx.scene.control.ListView;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.testfx.api.FxAssert;
import org.testfx.api.FxRobot;
import org.testfx.api.FxRobotException;
import org.testfx.framework.junit5.ApplicationExtension;
import org.testfx.framework.junit5.Start;

import java.time.LocalDate;
import java.util.function.Predicate;

import static org.junit.jupiter.api.Assertions.*;

@ExtendWith({ApplicationExtension.class})
class BuyTicketTest {

@Start
void onStart(Stage stage) {
new NavController(stage).navigate(new NavActivityDestination(new BuyTicketActivity()));
stage.show();
}

@AfterEach
void cleanState() {
CinehubApplication.setSessionToken(null);
}


@Test
void buyTicketOnNextButtonClick_dateIsNextDayDate(FxRobot robot) {
logInAsProjectionist(robot);
robot.clickOn("#nextButton");
FxAssert.verifyThat("#dateOfProjectionDatePicker", (DatePicker datePicker) -> datePicker.getValue().equals(LocalDate.now().plusDays(1)));
}

@Test
void buyTicketOnPreviousButtonClick_dateIsPreviousDayDate(FxRobot robot) {
logInAsProjectionist(robot);
robot.clickOn("#nextButton");
robot.clickOn("#previousButton");
FxAssert.verifyThat("#dateOfProjectionDatePicker", (DatePicker datePicker) -> datePicker.getValue().equals(LocalDate.now()));
}

@Test
void buyTicketOnTodayButtonClick_dateIsToday(FxRobot robot) {
logInAsProjectionist(robot);
for(int i=0; i<3;i++) {
robot.clickOn("#nextButton");
}
robot.clickOn("#todayButton");
FxAssert.verifyThat("#dateOfProjectionDatePicker", (DatePicker datePicker) -> datePicker.getValue().equals(LocalDate.now()));
}

@Test
void buyTicketOnContinueEnabledButtonClick_buttonIsEnabled(FxRobot robot) {
logInAsProjectionist(robot);
robot.clickOn("#movieListView");
FxAssert.verifyThat("#confirmMovieButton", (Button button) -> !button.isDisable());
}

@Test
void buyTicketOnContinueDisabledButtonClick_buttonIsDisabled(FxRobot robot) {
logInAsProjectionist(robot);
FxAssert.verifyThat("#confirmMovieButton", (Predicate<Button>) Node::isDisable);
}

@Test
void buyTicketOnTimeListView_loadCorrectList(FxRobot robot) {
logInAsProjectionist(robot);
robot.clickOn("#movieListView");
robot.clickOn("#confirmMovieButton");
robot.clickOn("#cinemaListView");
FxAssert.verifyThat("#timeOfProjectionListView", (ListView listView) -> !listView.getItems().isEmpty());
}

@Test
void buyTicketOnTimeListView_loadIncorrectList(FxRobot robot) {
logInAsProjectionist(robot);
robot.clickOn("#movieListView");
robot.clickOn("#confirmMovieButton");
FxAssert.verifyThat("#timeOfProjectionListView", (ListView listView) -> listView.getItems().isEmpty());
}

private void logInAsProjectionist(FxRobot robot) {
robot.clickOn("#loginTab");
robot.clickOn("#emailTextField");
robot.write("ip@cinehub.com");
robot.clickOn("#passwordField");
robot.write("a");
robot.clickOn("#loginButton");
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
package com.ttbmp.cinehub.ui.desktop.manageshift;

import com.ttbmp.cinehub.ui.desktop.CinehubApplication;
import com.ttbmp.cinehub.ui.desktop.buyticket.BuyTicketActivity;
import com.ttbmp.cinehub.ui.desktop.utilities.ui.navigation.NavActivityDestination;
import com.ttbmp.cinehub.ui.desktop.utilities.ui.navigation.NavController;
import javafx.scene.Node;

import javafx.scene.control.Button;
import javafx.scene.control.DatePicker;
import javafx.scene.control.Label;
import javafx.scene.input.KeyCode;
import javafx.stage.Stage;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.testfx.api.FxAssert;
import org.testfx.api.FxRobot;
import org.testfx.api.FxRobotException;
import org.testfx.framework.junit5.ApplicationExtension;
import org.testfx.framework.junit5.Start;


import java.time.LocalDate;
import java.util.function.Predicate;


@ExtendWith({ApplicationExtension.class})
class ManageEmployeeShiftTest {

@Start
void onStart(Stage stage) {
new NavController(stage).navigate(new NavActivityDestination(new BuyTicketActivity()));
stage.show();
}

@AfterEach
void cleanState() {
CinehubApplication.setSessionToken(null);
}

@Test
void manageEmployeeShiftTabOnUnauthenticatedSession_isNotClickable(FxRobot robot) {
Assertions.assertThrows(FxRobotException.class, () -> robot.clickOn("#manageShiftTab"));
}

@Test
void manageEmployeeShiftTabOnProjectionistSession_isVisible(FxRobot robot) {
logInAsManager(robot);
FxAssert.verifyThat("#manageShiftTab", Node::isVisible);
}

@Test
void manageEmployeeShiftDefaultDate_isTodayDate(FxRobot robot) {
logInAsManager(robot);
robot.clickOn("#manageShiftTab");
FxAssert.verifyThat("#periodDatePicker", (DatePicker datePicker) -> datePicker.getValue().equals(LocalDate.now()));
}

@Test
void manageEmployeeShiftOnNextButtonClick_dateIsNextMonthDate(FxRobot robot) {
logInAsManager(robot);
robot.clickOn("#manageShiftTab");
robot.clickOn("#nextButton");
FxAssert.verifyThat("#periodDatePicker", (DatePicker datePicker) -> datePicker.getValue().equals(LocalDate.now().plusWeeks(1)));
}

@Test
void manageEmployeeShiftOnPreviousButtonClick_dateIsPreviousMonthDate(FxRobot robot) {
logInAsManager(robot);
robot.clickOn("#manageShiftTab");
robot.clickOn("#previousButton");
FxAssert.verifyThat("#periodDatePicker", (DatePicker datePicker) -> datePicker.getValue().equals(LocalDate.now().minusWeeks(1)));
}

@Test
void assignShiftDuplicated_showErrorMessage(FxRobot robot) {
logInAsManager(robot);
robot.clickOn("#manageShiftTab");
robot.clickOn("#nextButton");
robot.clickOn("#addButton");
robot.clickOn("#confirmButton");
FxAssert.verifyThat("#errorLabel", (Label string) -> string.textProperty().getValue().equals("Shift Already Exist"));
robot.push(KeyCode.ALT, KeyCode.F4);
robot.clickOn("#cancelButton");
}

@Test
void showShift_ModifyButtonIsDisabled(FxRobot robot) {
logInAsManager(robot);
robot.clickOn("#manageShiftTab");
robot.clickOn("#previousButton");
robot.clickOn("#shiftHBox");
FxAssert.verifyThat("#modifyShiftButton", (Predicate<Button>) Node::isDisable);
robot.push(KeyCode.ALT, KeyCode.F4);
}

@Test
void showShift_ModifyButtonIsEnabled(FxRobot robot) {
logInAsManager(robot);
robot.clickOn("#manageShiftTab");
robot.clickOn("#nextButton");
robot.clickOn("#shiftHBox");
FxAssert.verifyThat("#modifyShiftButton", (Button button)-> !button.isDisable());
robot.push(KeyCode.ALT, KeyCode.F4);
}

@Test
void showShift_DeleteButtonIsDisabled(FxRobot robot) {
logInAsManager(robot);
robot.clickOn("#manageShiftTab");
robot.clickOn("#previousButton");
robot.clickOn("#shiftHBox");
FxAssert.verifyThat("#deleteShiftButton", (Predicate<Button>) Node::isDisable);
robot.push(KeyCode.ALT, KeyCode.F4);
}

@Test
void showShift_DeleteButtonIsEnabled(FxRobot robot) {
logInAsManager(robot);
robot.clickOn("#manageShiftTab");
robot.clickOn("#nextButton");
robot.clickOn("#shiftHBox");
FxAssert.verifyThat("#deleteShiftButton", (Button button)-> !button.isDisable());
robot.push(KeyCode.ALT, KeyCode.F4);
}


private void logInAsManager(FxRobot robot) {
robot.clickOn("#loginTab");
robot.clickOn("#emailTextField");
robot.write("mz@cinehub.com");
robot.clickOn("#passwordField");
robot.write("1234");
robot.clickOn("#loginButton");
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
package com.ttbmp.cinehub.ui.desktop.viewpersonalschedule;

import com.ttbmp.cinehub.ui.desktop.CinehubApplication;
import com.ttbmp.cinehub.ui.desktop.buyticket.BuyTicketActivity;
import com.ttbmp.cinehub.ui.desktop.utilities.ui.navigation.NavActivityDestination;
import com.ttbmp.cinehub.ui.desktop.utilities.ui.navigation.NavController;
import javafx.scene.Node;
import javafx.scene.control.DatePicker;
import javafx.stage.Stage;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.testfx.api.FxAssert;
import org.testfx.api.FxRobot;
import org.testfx.api.FxRobotException;
import org.testfx.framework.junit5.ApplicationExtension;
import org.testfx.framework.junit5.Start;

import java.time.LocalDate;

@ExtendWith({ApplicationExtension.class})
class ViewPersonalScheduleTest {

@Start
void onStart(Stage stage) {
new NavController(stage).navigate(new NavActivityDestination(new BuyTicketActivity()));
stage.show();
}

@AfterEach
void cleanState() {
CinehubApplication.setSessionToken(null);
}

@Test
void viewPersonalScheduleTabOnUnauthenticatedSession_isNotClickable(FxRobot robot) {
Assertions.assertThrows(FxRobotException.class, () -> robot.clickOn("#viewPersonalScheduleTab"));
}

@Test
void viewPersonalScheduleTabOnProjectionistSession_isVisible(FxRobot robot) {
logInAsProjectionist(robot);
FxAssert.verifyThat("#viewPersonalScheduleTab", Node::isVisible);
}

@Test
void viewPersonalScheduleDefaultDate_isTodayDate(FxRobot robot) {
logInAsProjectionist(robot);
robot.clickOn("#viewPersonalScheduleTab");
FxAssert.verifyThat("#datePicker", (DatePicker datePicker) -> datePicker.getValue().equals(LocalDate.now()));
}

@Test
void viewPersonalScheduleOnNextButtonClick_dateIsNextMonthDate(FxRobot robot) {
logInAsProjectionist(robot);
robot.clickOn("#viewPersonalScheduleTab");
robot.clickOn("#nextButton");
FxAssert.verifyThat("#datePicker", (DatePicker datePicker) -> datePicker.getValue().equals(LocalDate.now().plusMonths(1)));
}

@Test
void viewPersonalScheduleOnPreviousButtonClick_dateIsPreviousMonthDate(FxRobot robot) {
logInAsProjectionist(robot);
robot.clickOn("#viewPersonalScheduleTab");
robot.clickOn("#previousButton");
FxAssert.verifyThat("#datePicker", (DatePicker datePicker) -> datePicker.getValue().equals(LocalDate.now().minusMonths(1)));
}

private void logInAsProjectionist(FxRobot robot) {
robot.clickOn("#loginTab");
robot.clickOn("#emailTextField");
robot.write("fb@cinehub.com");
robot.clickOn("#passwordField");
robot.write("asdfghjkl");
robot.clickOn("#loginButton");
}

}