Fixed up tests to be aware of the new dialog

pull/4112/head
tidusjar 4 years ago
parent 5e6edc2ad8
commit 5678f43f41

@ -21,7 +21,7 @@
</div> </div>
<div class="row button-request-container" *ngIf="!result.available && !result.approved && !result.requested"> <div class="row button-request-container" *ngIf="!result.available && !result.approved && !result.requested">
<div class="button-request poster-overlay"> <div class="button-request poster-overlay">
<button id="requestButton{{result.id}}{{result.type}}" mat-raised-button class="btn-green full-width poster-request-btn" (click)="request($event)"> <button id="requestButton{{result.id}}{{result.type}}{{discoverType}}" mat-raised-button class="btn-green full-width poster-request-btn" (click)="request($event)">
<i *ngIf="!loading" class="fa-lg fas fa-cloud-download-alt"></i> <i *ngIf="!loading" class="fa-lg fas fa-cloud-download-alt"></i>
<i *ngIf="loading" class="fas fa-spinner fa-pulse fa-2x fa-fw" aria-hidden="true"></i> <i *ngIf="loading" class="fas fa-spinner fa-pulse fa-2x fa-fw" aria-hidden="true"></i>
</button> </button>

@ -7,6 +7,7 @@ import { ISearchTvResultV2 } from "../../../interfaces/ISearchTvResultV2";
import { ISearchMovieResultV2 } from "../../../interfaces/ISearchMovieResultV2"; import { ISearchMovieResultV2 } from "../../../interfaces/ISearchMovieResultV2";
import { EpisodeRequestComponent } from "../../../shared/episode-request/episode-request.component"; import { EpisodeRequestComponent } from "../../../shared/episode-request/episode-request.component";
import { AdminRequestDialogComponent } from "../../../shared/admin-request-dialog/admin-request-dialog.component"; import { AdminRequestDialogComponent } from "../../../shared/admin-request-dialog/admin-request-dialog.component";
import { DiscoverType } from "../carousel-list/carousel-list.component";
@Component({ @Component({
selector: "discover-card", selector: "discover-card",
@ -15,6 +16,7 @@ import { AdminRequestDialogComponent } from "../../../shared/admin-request-dialo
}) })
export class DiscoverCardComponent implements OnInit { export class DiscoverCardComponent implements OnInit {
@Input() public discoverType: DiscoverType;
@Input() public result: IDiscoverCardResult; @Input() public result: IDiscoverCardResult;
@Input() public isAdmin: boolean; @Input() public isAdmin: boolean;
public RequestType = RequestType; public RequestType = RequestType;
@ -126,7 +128,18 @@ export class DiscoverCardComponent implements OnInit {
const dialog = this.dialog.open(AdminRequestDialogComponent, { width: "700px", data: { type: RequestType.movie, id: this.result.id }, panelClass: 'modal-panel' }); const dialog = this.dialog.open(AdminRequestDialogComponent, { width: "700px", data: { type: RequestType.movie, id: this.result.id }, panelClass: 'modal-panel' });
dialog.afterClosed().subscribe((result) => { dialog.afterClosed().subscribe((result) => {
if (result) { if (result) {
this.requestService.requestMovie({ theMovieDbId: +this.result.id,
languageCode: null,
qualityPathOverride: result.radarrPathId,
requestOnBehalf: result.username?.id,
rootFolderOverride: result.radarrFolderId, }).subscribe(x => {
if (x.result) {
this.result.requested = true; this.result.requested = true;
this.messageService.send(x.message, "Ok");
} else {
this.messageService.send(x.errorMessage, "Ok");
}
});
} }
}); });
} else { } else {

@ -8,6 +8,6 @@
<p-carousel #carousel [numVisible]="10" [numScroll]="10" [page]="0" [value]="discoverResults" [responsiveOptions]="responsiveOptions" (onPage)="newPage()"> <p-carousel #carousel [numVisible]="10" [numScroll]="10" [page]="0" [value]="discoverResults" [responsiveOptions]="responsiveOptions" (onPage)="newPage()">
<ng-template let-result pTemplate="item"> <ng-template let-result pTemplate="item">
<discover-card [isAdmin]="isAdmin" [result]="result"></discover-card> <discover-card [discoverType]="discoverType" [isAdmin]="isAdmin" [result]="result"></discover-card>
</ng-template> </ng-template>
</p-carousel> </p-carousel>

@ -1,5 +1,6 @@
import { BasePage } from "../base.page"; import { BasePage } from "../base.page";
import { DiscoverCard } from "../shared/DiscoverCard"; import { AdminRequestDialog } from "../shared/AdminRequestDialog";
import { DiscoverCard, DiscoverType } from "../shared/DiscoverCard";
class CarouselComponent { class CarouselComponent {
private type: string; private type: string;
@ -16,8 +17,8 @@ class CarouselComponent {
return cy.get(`#${this.type}Tv-button`); return cy.get(`#${this.type}Tv-button`);
} }
getCard(id: string, movie: boolean): DiscoverCard { getCard(id: string, movie: boolean, type?: DiscoverType): DiscoverCard {
return new DiscoverCard(id, movie); return new DiscoverCard(id, movie, type);
} }
constructor(id: string) { constructor(id: string) {
@ -27,6 +28,7 @@ class CarouselComponent {
class DiscoverPage extends BasePage { class DiscoverPage extends BasePage {
popularCarousel = new CarouselComponent("popular"); popularCarousel = new CarouselComponent("popular");
adminOptionsDialog = new AdminRequestDialog();
constructor() { constructor() {
super(); super();

@ -1,13 +1,22 @@
import { EpisodeRequestModal } from "./EpisodeRequestModal"; import { EpisodeRequestModal } from "./EpisodeRequestModal";
export enum DiscoverType {
Upcoming,
Trending,
Popular,
RecentlyRequested,
}
export class DiscoverCard { export class DiscoverCard {
private id: string; private id: string;
private movie: boolean; private movie: boolean;
private type: DiscoverType;
episodeRequestModal = new EpisodeRequestModal(); episodeRequestModal = new EpisodeRequestModal();
constructor(id: string, movie: boolean) { constructor(id: string, movie: boolean, type?: DiscoverType) {
this.id = id; this.id = id;
this.movie = movie; this.movie = movie;
this.type = type;
} }
get topLevelCard(): Cypress.Chainable<any> { get topLevelCard(): Cypress.Chainable<any> {
@ -35,7 +44,7 @@ export class DiscoverCard {
} }
get requestButton(): Cypress.Chainable<any> { get requestButton(): Cypress.Chainable<any> {
return cy.get(`#requestButton${this.id}${this.movie ? '1' : '0'}`); return cy.get(`#requestButton${this.id}${this.movie ? '1' : '0'}${this.type}`);
} }
verifyTitle(expected: string): Cypress.Chainable<any> { verifyTitle(expected: string): Cypress.Chainable<any> {

@ -1,11 +1,12 @@
import { discoverPage as Page } from "@/integration/page-objects"; import { discoverPage as Page } from "@/integration/page-objects";
import { DiscoverType } from "@/integration/page-objects/shared/DiscoverCard";
describe("Discover Cards Requests Tests", () => { describe("Discover Cards Requests Tests", () => {
beforeEach(() => { beforeEach(() => {
cy.login(); cy.login();
}); });
it("Not requested movie allows us to request", () => { it("Not requested movie allows admin to request", () => {
window.localStorage.setItem("DiscoverOptions2", "2"); window.localStorage.setItem("DiscoverOptions2", "2");
cy.intercept("GET", "**/search/Movie/Popular/**", (req) => { cy.intercept("GET", "**/search/Movie/Popular/**", (req) => {
req.reply((res) => { req.reply((res) => {
@ -27,22 +28,76 @@ describe("Discover Cards Requests Tests", () => {
var expectedId = body[0].id; var expectedId = body[0].id;
var title = body[0].title; var title = body[0].title;
const card = Page.popularCarousel.getCard(expectedId, true); const card = Page.popularCarousel.getCard(expectedId, true, DiscoverType.Popular);
card.verifyTitle(title); card.verifyTitle(title);
card.requestButton.should("exist"); card.requestButton.should("exist");
// Not visible until hover // Not visible until hover
card.requestButton.should("not.be.visible"); card.requestButton.should("not.be.visible");
cy.wait(500) cy.wait(500);
card.topLevelCard.realHover(); card.topLevelCard.realHover();
card.requestButton.should("be.visible"); card.requestButton.should("be.visible");
card.requestButton.click(); card.requestButton.click();
Page.adminOptionsDialog.isOpen();
Page.adminOptionsDialog.requestButton.click();
cy.verifyNotification("has been successfully added!"); cy.verifyNotification("has been successfully added!");
card.requestButton.should("not.exist");
card.availabilityText.should("have.text", "Pending");
card.statusClass.should("have.class", "requested");
});
});
it.only("Not requested movie allows non-admin to request", () => {
cy.generateUniqueId().then((id) => {
cy.login();
const roles = [];
roles.push({ value: "RequestMovie", enabled: true });
cy.createUser(id, "a", roles).then(() => {
cy.removeLogin();
cy.loginWithCreds(id, "a");
window.localStorage.setItem("DiscoverOptions2", "2");
cy.intercept("GET", "**/search/Movie/Popular/**", (req) => {
req.reply((res) => {
const body = res.body;
const movie = body[6];
movie.available = false;
movie.approved = false;
movie.requested = false;
body[6] = movie;
res.send(body);
});
}).as("cardsResponse");
Page.visit();
cy.wait("@cardsResponse").then((res) => {
const body = JSON.parse(res.response.body);
var expectedId = body[6].id;
var title = body[6].title;
const card = Page.popularCarousel.getCard(expectedId, true, DiscoverType.Popular);
card.verifyTitle(title);
card.requestButton.should("exist");
// Not visible until hover
card.requestButton.should("not.be.visible"); card.requestButton.should("not.be.visible");
card.availabilityText.should('have.text','Pending'); cy.wait(500);
card.statusClass.should('have.class','requested'); card.topLevelCard.realHover();
card.requestButton.should("be.visible");
card.requestButton.click();
cy.verifyNotification("has been successfully added!");
card.requestButton.should("not.exist");
card.availabilityText.should("have.text", "Pending");
card.statusClass.should("have.class", "requested");
});
});
}); });
}); });
@ -68,13 +123,13 @@ describe("Discover Cards Requests Tests", () => {
var expectedId = body[1].id; var expectedId = body[1].id;
var title = body[1].title; var title = body[1].title;
const card = Page.popularCarousel.getCard(expectedId, true); const card = Page.popularCarousel.getCard(expectedId, true, DiscoverType.Popular);
card.verifyTitle(title); card.verifyTitle(title);
card.topLevelCard.realHover(); card.topLevelCard.realHover();
card.requestButton.should("not.exist"); card.requestButton.should("not.exist");
card.availabilityText.should('have.text','Available'); card.availabilityText.should("have.text", "Available");
card.statusClass.should('have.class','available'); card.statusClass.should("have.class", "available");
}); });
}); });
@ -100,14 +155,13 @@ describe("Discover Cards Requests Tests", () => {
var expectedId = body[1].id; var expectedId = body[1].id;
var title = body[1].title; var title = body[1].title;
const card = Page.popularCarousel.getCard(expectedId, true); const card = Page.popularCarousel.getCard(expectedId, true, DiscoverType.Popular);
card.verifyTitle(title); card.title.realHover();
card.topLevelCard.realHover();
card.verifyTitle(title);
card.requestButton.should("not.exist"); card.requestButton.should("not.exist");
card.availabilityText.should('have.text','Pending'); card.availabilityText.should("have.text", "Pending");
card.statusClass.should('have.class','requested'); card.statusClass.should("have.class", "requested");
}); });
}); });
@ -133,13 +187,13 @@ describe("Discover Cards Requests Tests", () => {
var expectedId = body[1].id; var expectedId = body[1].id;
var title = body[1].title; var title = body[1].title;
const card = Page.popularCarousel.getCard(expectedId, true); const card = Page.popularCarousel.getCard(expectedId, true, DiscoverType.Popular);
card.verifyTitle(title); card.title.realHover();
card.topLevelCard.realHover();
card.verifyTitle(title);
card.requestButton.should("not.exist"); card.requestButton.should("not.exist");
card.availabilityText.should('have.text','Approved'); card.availabilityText.should("have.text", "Approved");
card.statusClass.should('have.class','approved'); card.statusClass.should("have.class", "approved");
}); });
}); });
@ -163,17 +217,17 @@ describe("Discover Cards Requests Tests", () => {
var expectedId = body[1].id; var expectedId = body[1].id;
var title = body[1].title; var title = body[1].title;
const card = Page.popularCarousel.getCard(expectedId, true); const card = Page.popularCarousel.getCard(expectedId, true, DiscoverType.Popular);
card.verifyTitle(title); card.title.realHover();
card.topLevelCard.realHover();
card.verifyTitle(title);
card.requestButton.should("not.exist"); card.requestButton.should("not.exist");
card.availabilityText.should('have.text','Available'); card.availabilityText.should("have.text", "Available");
card.statusClass.should('have.class','available'); card.statusClass.should("have.class", "available");
}); });
}); });
it("Not available TV does not allow us to request", () => { it("Not available TV allow admin to request", () => {
cy.intercept("GET", "**/search/Tv/popular/**", (req) => { cy.intercept("GET", "**/search/Tv/popular/**", (req) => {
req.reply((res) => { req.reply((res) => {
const body = res.body; const body = res.body;
@ -184,25 +238,77 @@ describe("Discover Cards Requests Tests", () => {
res.send(body); res.send(body);
}); });
}).as("cardsResponse"); }).as("cardsResponse");
cy.intercept("GET", "**/search/Tv/**").as("otherResponses");
window.localStorage.setItem("DiscoverOptions2", "3"); window.localStorage.setItem("DiscoverOptions2", "3");
Page.visit(); Page.visit();
cy.wait("@otherResponses");
cy.wait("@cardsResponse").then((res) => { cy.wait("@cardsResponse").then((res) => {
const body = JSON.parse(res.response.body); const body = JSON.parse(res.response.body);
var expectedId = body[3].id; var expectedId = body[3].id;
var title = body[3].title; var title = body[3].title;
const card = Page.popularCarousel.getCard(expectedId, false); const card = Page.popularCarousel.getCard(expectedId, false, DiscoverType.Popular);
card.title.realHover();
card.verifyTitle(title); card.verifyTitle(title);
card.topLevelCard.realHover(); card.requestButton.should("be.visible");
card.requestButton.click();
const modal = card.episodeRequestModal;
modal.latestSeasonButton.click();
Page.adminOptionsDialog.isOpen();
Page.adminOptionsDialog.requestButton.click();
cy.verifyNotification("has been added successfully");
});
});
it("Not available TV allow non-admin to request", () => {
cy.generateUniqueId().then((id) => {
cy.login();
const roles = [];
roles.push({ value: "RequestTv", enabled: true });
cy.createUser(id, "a", roles).then(() => {
cy.removeLogin();
cy.loginWithCreds(id, "a");
cy.intercept("GET", "**/search/Tv/popular/**", (req) => {
req.reply((res) => {
const body = res.body;
const tv = body[5];
tv.fullyAvailable = false;
body[5] = tv;
res.send(body);
});
}).as("cardsResponse");
cy.intercept("GET", "**/search/Tv/**").as("otherResponses");
window.localStorage.setItem("DiscoverOptions2", "3");
Page.visit();
cy.wait("@otherResponses");
cy.wait("@cardsResponse").then((res) => {
const body = JSON.parse(res.response.body);
var expectedId = body[5].id;
var title = body[5].title;
const card = Page.popularCarousel.getCard(expectedId, false, DiscoverType.Popular);
card.title.realHover();
card.verifyTitle(title);
card.requestButton.should("be.visible"); card.requestButton.should("be.visible");
card.requestButton.click(); card.requestButton.click();
const modal = card.episodeRequestModal; const modal = card.episodeRequestModal;
modal.latestSeasonButton.click(); modal.latestSeasonButton.click();
cy.verifyNotification("has been added successfully")
cy.verifyNotification("has been added successfully");
});
});
}); });
}); });
}); });

Loading…
Cancel
Save