blob: ba799fdd9756da3ce9b198944859816dedc8beea (
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
package webui.pages.components;
import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat;
import com.microsoft.playwright.Locator;
import dev.submelon.model.PantryItem;
import webui.pages.IndexPage;
/**
* A component to add an item to the pantry on the index page
*/
public class AddItemComponent {
private Locator nameInput;
private Locator descriptionInput;
private Locator quantityInput;
private Locator quantityTypeInput;
private Locator submitButton;
private Locator cancelButton;
/**
* Opens the add item component on the index page and creates the instance
* of the AddItemComponent.
*/
public static AddItemComponent open(final IndexPage page) {
// Check button is visible and enabled
Locator addButton = page.getAddItemButton();
assertThat(addButton).isVisible();
assertThat(addButton).isEnabled();
// make available add item component
addButton.click();
// verify initial state of inputs and buttons
assertThat(addButton).isHidden();
// find and assign inputs for the component
AddItemComponent component = new AddItemComponent();
component.nameInput = page.getItemNameInput();
component.descriptionInput = page.getItemDescriptionInput();
component.quantityInput = page.getItemQuantityInput();
component.quantityTypeInput = page.getQuantityTypeInput();
// find and assign buttons for the component
component.submitButton = page.getSubmitItemButton();
component.cancelButton = page.getCancelButton();
component.verifyOpen();
return component;
}
/**
* Enter values into the inputs based on a {@link PantryItem}
*/
public void enterPantryItem(final PantryItem item) {
if (item.getName() != null) {
nameInput.fill(item.getName());
}
if (item.getDescription() != null) {
descriptionInput.fill(item.getDescription());
}
if (item.getQuantity() != null) {
quantityInput.fill(String.valueOf(item.getQuantity()));
}
if (item.getQuantityUnitType() != null) {
quantityTypeInput.fill(item.getQuantityUnitType());
}
}
/**
* Submits the item to the API and closes the add item component
*/
public void submit() {
submitButton.click();
verifyClosed();
}
/**
* Closes the add item component without saving
*/
public void cancel() {
cancelButton.click();
verifyClosed();
}
/**
* Verify the expected inputs and buttons appear as expected on opening
*/
public void verifyOpen() {
assertThat(nameInput).isVisible();
assertThat(nameInput).isEditable();
assertThat(descriptionInput).isVisible();
assertThat(descriptionInput).isEditable();
assertThat(quantityInput).isVisible();
assertThat(quantityInput).isEditable();
assertThat(quantityTypeInput).isVisible();
assertThat(quantityTypeInput).isEditable();
assertThat(submitButton).isVisible();
assertThat(submitButton).isDisabled();
assertThat(cancelButton).isVisible();
assertThat(cancelButton).isEnabled();
}
/**
* Verify all of the expected inputs and buttons no longer appear
*/
public void verifyClosed() {
assertThat(nameInput).isHidden();
assertThat(descriptionInput).isHidden();
assertThat(quantityInput).isHidden();
assertThat(quantityTypeInput).isHidden();
assertThat(submitButton).isHidden();
assertThat(cancelButton).isHidden();
}
}
|