Added more tests to cover the request grid around TV

This commit is contained in:
tidusjar 2021-03-17 22:09:52 +00:00
commit c2a3fd1c4f
9 changed files with 225 additions and 40 deletions

View file

@ -1,5 +1,10 @@
import { BasePage } from "../../base.page";
class BaseMediaPage extends BasePage {
get title(): Cypress.Chainable<any> {
return cy.get('#mediaTitle');
}
}
class TvRequestPanel {
seasonTab(seasonNumber: number): Cypress.Chainable<any> {
@ -56,7 +61,7 @@ class TvDetailsInformationPanel {
}
}
class TvDetailsPage extends BasePage {
class TvDetailsPage extends BaseMediaPage {
get availableButton(): Cypress.Chainable<any> {

View file

@ -4,3 +4,4 @@ export * from './wizard/wizard.page';
export * from './details/tv/tvdetails.page';
export * from './search/search.page';
export * from './user-preferences/user-preferences.page';
export * from './requests/requests.page';

View file

@ -0,0 +1,132 @@
import { BasePage } from "../base.page";
class MediaBaseTab {
get allRequestsButton(): Cypress.Chainable<any> {
return cy.get('#filterAll');
}
get pendingRequestsButton(): Cypress.Chainable<any> {
return cy.get('#filterPending');
}
get processingRequestsButton(): Cypress.Chainable<any> {
return cy.get('#filterProcessing');
}
get availableRequestsButton(): Cypress.Chainable<any> {
return cy.get('#filterAvailable');
}
get deniedRequestsButton(): Cypress.Chainable<any> {
return cy.get('#filterDenied');
}
get requestsToDisplayDropdown(): Cypress.Chainable<any> {
return cy.get('#requestsToDisplayDropdown');
}
getGridRow(requestId: number): GridRow {
return new GridRow(requestId);
}
}
class GridRow {
requestId: number;
get title(): Cypress.Chainable<any> {
return cy.get(`#title${this.requestId}`);
}
get requestedBy(): Cypress.Chainable<any> {
return cy.get(`#requestedBy${this.requestId}`);
}
get requestedDate(): Cypress.Chainable<any> {
return cy.get(`#requestedDate${this.requestId}`);
}
get requestedStatus(): Cypress.Chainable<any> {
return cy.get(`#requestedStatus${this.requestId}`);
}
get status(): Cypress.Chainable<any> {
return cy.get(`#status${this.requestId}`);
}
get detailsButton(): Cypress.Chainable<any> {
return cy.get(`#detailsButton${this.requestId}`);
}
get optionsButton(): Cypress.Chainable<any> {
return cy.get(`#optionsButton${this.requestId}`);
}
get optionsDelete(): Cypress.Chainable<any> {
return cy.get(`#requestDelete`);
}
get optionsApprove(): Cypress.Chainable<any> {
return cy.get(`#requestApprove`);
}
get optionsChangeAvailability(): Cypress.Chainable<any> {
return cy.get(`#requestChangeAvailability`);
}
constructor(requestId: number) {
this.requestId = requestId;
}
}
class MoviesTab extends MediaBaseTab {
get adminMasterCheckbox(): Cypress.Chainable<any> {
return cy.get('#adminMasterCheckbox');
}
get bulkFabButton(): Cypress.Chainable<any> {
return cy.get('#bulkFab');
}
get deleteFabButton(): Cypress.Chainable<any> {
return cy.get('#deleteFabButton');
}
get approveFabButton(): Cypress.Chainable<any> {
return cy.get('#approveFabButton');
}
}
class RequestsPage extends BasePage {
get moviesTab(): Cypress.Chainable<any> {
return cy.get('[role="tab"]').eq(0);
}
get tvTab(): Cypress.Chainable<any> {
return cy.get('[role="tab"]').eq(1);
}
get musicTab(): Cypress.Chainable<any> {
return cy.get('[role="tab"]').eq(2);
}
movies = new MoviesTab();
tv = new MediaBaseTab();
music = new MediaBaseTab();
constructor() {
super();
}
visit(options: Cypress.VisitOptions): Cypress.Chainable<Cypress.AUTWindow>;
visit(): Cypress.Chainable<Cypress.AUTWindow>;
visit(id: string): Cypress.Chainable<Cypress.AUTWindow>;
visit(id: string, options: Cypress.VisitOptions): Cypress.Chainable<Cypress.AUTWindow>;
visit(id?: any, options?: any) {
return cy.visit(`/requests-list`, options);
}
}
export const requestPage = new RequestsPage();

View file

@ -26,11 +26,11 @@ Cypress.Commands.add('requestMovie', (movieId) => {
})
Cypress.Commands.add('requestAllTv', (tvId) => {
cy.request({
return cy.request({
method: 'POST',
url: '/api/v1/request/tv',
url: '/api/v2/requests/tv',
body: {
TvDbId: tvId,
TheMovieDbId: tvId,
RequestAll: true
},
headers: {

View file

@ -0,0 +1,47 @@
import {
requestPage as Page,
tvDetailsPage as TvPage,
} from "@/integration/page-objects";
describe("Requests Tests", () => {
it("Clicking Details on a Tv request, takes us to the correct detail page", () => {
cy.intercept("POST", "request/tv").as("tvRequest");
cy.intercept("token").as("login");
cy.login();
cy.requestAllTv(60735); // The Flash
Page.visit();
Page.tvTab.click();
const row = Page.tv.getGridRow(60735);
row.detailsButton.click();
cy.location("pathname").should("contains", "/details/tv/60735");
TvPage.title.contains("The Flash");
});
it("Deleting TV requests, removes from grid", () => {
cy.intercept("POST", "request/tv").as("tvRequest");
cy.intercept("token").as("login");
cy.intercept('DELETE', 'Request/tv/child/60735').as('deleteRequest');
cy.login();
// cy.wait('@login');
cy.requestAllTv(60735); // The Flash
Page.visit();
Page.tvTab.click();
const row = Page.tv.getGridRow(60735);
row.optionsButton.click();
row.optionsDelete.click();
cy.wait('@deleteRequest').then((intercept) => {
expect(intercept.response.body).is.true;
})
row.title.should('not.exist');
});
});