Skip to content

Commit

Permalink
Merge branch '147-us08---feedback' of github.com:fga-eps-mds/2024.2-U…
Browse files Browse the repository at this point in the history
…nB-TV-Frontend into 147-us08---feedback
  • Loading branch information
Luizaxx committed Feb 7, 2025
2 parents f761421 + f5eb0f4 commit bd70f7c
Show file tree
Hide file tree
Showing 5 changed files with 160 additions and 5 deletions.
1 change: 1 addition & 0 deletions src/app/environment/environment.test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
export const environment = {
apiURL: "http://localhost:8080/api",
videoAPIURL: "http://localhost:8001/api",
usersAPIURL: "http://localhost:8000/api",
adminAPIURL: "http://localhost:8080/api",
Expand Down
2 changes: 1 addition & 1 deletion src/app/environment/environment.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
export const environment = {
apiURL: process.env["API_URL"] || "http://localhost:8080/api",
apiURL: process.env["API_URL"] ?? "http://localhost:8080/api",
videoAPIURL: process.env["videoAPIURL"],
usersAPIURL: process.env["usersAPIURL"],
adminAPIURL: process.env["adminAPIURL"],
Expand Down
7 changes: 3 additions & 4 deletions src/app/pages/feedback-page/feedback-page.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,17 +47,16 @@ export class FeedbackPageComponent implements OnInit {
console.log("Resposta do backend:", res);
this.alertService.showMessage("success", "Sucesso", "Feedback enviado com sucesso!");
this.feedbackForm.reset();
this.isSendingEmail = false; // Garante que o status é resetado no sucesso
},
(error: HttpErrorResponse) => {
console.error('Erro ao enviar feedback:', error);
this.alertService.showMessage("error", "Erro", 'Erro ao enviar: ' + error.message);
},
() => {
this.isSendingEmail = false;
this.isSendingEmail = false; // Agora também reseta em caso de erro
}
);
} else {
this.alertService.showMessage("info", "Alerta", "Preencha todos os campos corretamente!");
}
}
}
}
109 changes: 109 additions & 0 deletions src/app/pages/feedback-page/feedback.component.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { FeedbackPageComponent } from './feedback-page.component';
import { FormBuilder, ReactiveFormsModule } from '@angular/forms';
import { FeedbackService } from 'src/app/services/feedback.service';
import { AlertService } from 'src/app/services/alert.service';
import { of, throwError } from 'rxjs';

describe('FeedbackPageComponent', () => {
let component: FeedbackPageComponent;
let fixture: ComponentFixture<FeedbackPageComponent>;
let mockFeedbackService: jasmine.SpyObj<FeedbackService>;
let mockAlertService: jasmine.SpyObj<AlertService>;

beforeEach(async () => {
mockFeedbackService = jasmine.createSpyObj('FeedbackService', ['sendFeedback']);
mockAlertService = jasmine.createSpyObj('AlertService', ['showMessage']);

await TestBed.configureTestingModule({
declarations: [FeedbackPageComponent],
imports: [ReactiveFormsModule],
providers: [
FormBuilder,
{ provide: FeedbackService, useValue: mockFeedbackService },
{ provide: AlertService, useValue: mockAlertService }
]
}).compileComponents();
});

beforeEach(() => {
fixture = TestBed.createComponent(FeedbackPageComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});

it('deve enviar o feedback com sucesso', () => {
mockFeedbackService.sendFeedback.and.returnValue(of('Feedback enviado com sucesso!'));

component.feedbackForm.setValue({
tema: 'Tema Teste',
descricao: 'Descrição Teste',
emailContato: 'teste@example.com'
});

component.sendFeedback();

expect(mockFeedbackService.sendFeedback).toHaveBeenCalled();
expect(mockAlertService.showMessage).toHaveBeenCalledWith(
'success',
'Sucesso',
'Feedback enviado com sucesso!'
);
});

it('deve exibir erro ao falhar no envio do feedback', () => {
mockFeedbackService.sendFeedback.and.returnValue(throwError(() => new Error('Erro 500')));

component.feedbackForm.setValue({
tema: 'Tema Teste',
descricao: 'Descrição Teste',
emailContato: 'teste@example.com'
});

component.sendFeedback();

expect(mockFeedbackService.sendFeedback).toHaveBeenCalled();
expect(mockAlertService.showMessage).toHaveBeenCalledWith(
'error',
'Erro',
'Erro ao enviar: Erro 500'
);
});

it('deve exibir alerta se o formulário for inválido', () => {
component.feedbackForm.setValue({
tema: '', // Campo obrigatório vazio
descricao: '',
emailContato: 'email-invalido' // Formato de e-mail inválido
});

component.sendFeedback();

expect(mockAlertService.showMessage).toHaveBeenCalledWith(
'info',
'Alerta',
'Preencha todos os campos corretamente!'
);

expect(mockFeedbackService.sendFeedback).not.toHaveBeenCalled();
});

it('deve permitir envio de feedback sem emailContato', () => {
mockFeedbackService.sendFeedback.and.returnValue(of('Feedback enviado com sucesso!'));

component.feedbackForm.setValue({
tema: 'Tema Teste',
descricao: 'Descrição Teste',
emailContato: '' // Deixando o e-mail em branco
});

component.sendFeedback();

expect(mockFeedbackService.sendFeedback).toHaveBeenCalled();
expect(mockAlertService.showMessage).toHaveBeenCalledWith(
'success',
'Sucesso',
'Feedback enviado com sucesso!'
);
});
});
46 changes: 46 additions & 0 deletions src/app/services/feedback.service.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import { TestBed } from '@angular/core/testing';
import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
import { FeedbackService } from './feedback.service';
import { IFeedbackData } from 'src/shared/model/feedback.model';
import { environment } from '../environment/environment';

describe('FeedbackService', () => {
let service: FeedbackService;
let httpMock: HttpTestingController;
const feedbackAPIUrl = environment.apiURL + '/feedback/email';

const mockFeedback: IFeedbackData = {
tema: 'Teste',
descricao: 'Descrição do feedback',
email_contato: 'teste@example.com',
};

beforeEach(() => {
TestBed.configureTestingModule({
imports: [HttpClientTestingModule],
providers: [FeedbackService],
});

service = TestBed.inject(FeedbackService);
httpMock = TestBed.inject(HttpTestingController);
});

afterEach(() => {
httpMock.verify();
});

it('deve ser criado', () => {
expect(service).toBeTruthy();
});

it('deve enviar feedback corretamente', () => {
service.sendFeedback(mockFeedback).subscribe(response => {
expect(response).toEqual({ success: true });
});

const req = httpMock.expectOne(feedbackAPIUrl);
expect(req.request.method).toBe('POST');
req.flush({ success: true });
});

});

0 comments on commit bd70f7c

Please sign in to comment.