diff --git a/src/app/core/feedback/feedback-data.service.spec.ts b/src/app/core/feedback/feedback-data.service.spec.ts new file mode 100644 index 0000000000..f3135a79da --- /dev/null +++ b/src/app/core/feedback/feedback-data.service.spec.ts @@ -0,0 +1,104 @@ +import { of as observableOf } from 'rxjs'; +import { createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; +import { FeedbackDataService } from './feedback-data.service'; +import { HALLink } from '../shared/hal-link.model'; +import { Item } from '../shared/item.model'; +import { HALEndpointServiceStub } from '../../shared/testing/hal-endpoint-service.stub'; +import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; +import { getMockRequestService } from '../../shared/mocks/request.service.mock'; +import { NotificationsService } from '../../shared/notifications/notifications.service'; +import { HttpClient } from '@angular/common/http'; +import { Store } from '@ngrx/store'; +import { CoreState } from '../core.reducers'; +import { DSOChangeAnalyzer } from 'src/app/core/data/dso-change-analyzer.service'; +import { Feedback } from './models/feedback.model'; + +describe('FeedbackDataService', () => { + let service: FeedbackDataService; + let requestService; + let halService; + let rdbService; + let notificationsService; + let http; + let comparator; + let objectCache; + let store; + let item; + let bundleLink; + let bundleHALLink; + + const feedbackPayload = Object.assign(new Feedback(), { + email: 'test@email.com', + message: 'message', + page: '/home' + }); + + const linkName = 'feedbacks'; + + + function initTestService(): FeedbackDataService { + bundleLink = '/items/0fdc0cd7-ff8c-433d-b33c-9b56108abc07/bundles'; + bundleHALLink = new HALLink(); + bundleHALLink.href = bundleLink; + item = new Item(); + item._links = { + bundles: bundleHALLink + }; + requestService = getMockRequestService(); + halService = new HALEndpointServiceStub('url') as any; + rdbService = {} as RemoteDataBuildService; + notificationsService = {} as NotificationsService; + http = {} as HttpClient; + comparator = new DSOChangeAnalyzer() as any; + objectCache = { + + addPatch: () => { + /* empty */ + }, + getObjectBySelfLink: () => { + /* empty */ + } + } as any; + store = {} as Store; + return new FeedbackDataService( + requestService, + rdbService, + store, + objectCache, + halService, + notificationsService, + http, + comparator, + ); + } + + + beforeEach(() => { + service = initTestService(); + }); + + + describe('getFeedback', () => { + beforeEach(() => { + spyOn(service, 'getFeedback'); + service.getFeedback('3'); + }); + + it('should call getFeedback with the feedback link', () => { + expect(service.getFeedback).toHaveBeenCalledWith('3'); + }); + }); + + + describe('createFeedback', () => { + beforeEach(() => { + spyOn(service, 'postToEndpoint'); + service.createFeedback(feedbackPayload); + }); + + it('should call postToEndpoint with the linkName and payload', () => { + expect(service.postToEndpoint).toHaveBeenCalledWith(linkName, feedbackPayload); + }); + }); + +}); diff --git a/src/app/core/feedback/feedback-data.service.ts b/src/app/core/feedback/feedback-data.service.ts index 2e35b46046..a6e22dabcf 100644 --- a/src/app/core/feedback/feedback-data.service.ts +++ b/src/app/core/feedback/feedback-data.service.ts @@ -21,7 +21,7 @@ import { PostRequest } from 'src/app/core/data/request.models'; import { RemoteData } from 'src/app/core/data/remote-data'; /** - * Service for checking and managing the status of the current end user agreement + * Service for checking and managing the feedback */ @Injectable() @dataService(FEEDBACK) @@ -37,7 +37,7 @@ export class FeedbackDataService extends DataService { protected notificationsService: NotificationsService, protected http: HttpClient, protected comparator: DSOChangeAnalyzer, - protected authService: AuthService, ) { + ) { super(); } diff --git a/src/app/info/feedback/feedback-content/feedback-content.component.html b/src/app/info/feedback/feedback-form/feedback-form.component.html similarity index 95% rename from src/app/info/feedback/feedback-content/feedback-content.component.html rename to src/app/info/feedback/feedback-form/feedback-form.component.html index d5f1038ad0..8b89266fea 100644 --- a/src/app/info/feedback/feedback-content/feedback-content.component.html +++ b/src/app/info/feedback/feedback-form/feedback-form.component.html @@ -6,7 +6,7 @@
- +

{{ 'info.feedback.email_help' | translate }}

diff --git a/src/app/info/feedback/feedback-content/feedback-content.component.scss b/src/app/info/feedback/feedback-form/feedback-form.component.scss similarity index 100% rename from src/app/info/feedback/feedback-content/feedback-content.component.scss rename to src/app/info/feedback/feedback-form/feedback-form.component.scss diff --git a/src/app/info/feedback/feedback-content/feedback-content.component.spec.ts b/src/app/info/feedback/feedback-form/feedback-form.component.spec.ts similarity index 90% rename from src/app/info/feedback/feedback-content/feedback-content.component.spec.ts rename to src/app/info/feedback/feedback-form/feedback-form.component.spec.ts index 9855d0dd6a..fb71abda95 100644 --- a/src/app/info/feedback/feedback-content/feedback-content.component.spec.ts +++ b/src/app/info/feedback/feedback-form/feedback-form.component.spec.ts @@ -1,7 +1,7 @@ import { EPersonMock } from './../../../shared/testing/eperson.mock'; import { FeedbackDataService } from './../../../core/feedback/feedback-data.service'; import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; -import { FeedbackContentComponent } from './feedback-content.component'; +import { FeedbackFormComponent } from './feedback-form.component'; import { TranslateModule } from '@ngx-translate/core'; import { NO_ERRORS_SCHEMA, DebugElement } from '@angular/core'; import { By } from '@angular/platform-browser'; @@ -16,9 +16,9 @@ import { of } from 'rxjs/internal/observable/of'; import { Feedback } from '../../../core/feedback/models/feedback.model'; -describe('FeedbackContentComponent', () => { - let component: FeedbackContentComponent; - let fixture: ComponentFixture; +describe('FeedbackFormComponent', () => { + let component: FeedbackFormComponent; + let fixture: ComponentFixture; let de: DebugElement; const notificationService = new NotificationsServiceStub(); const feedbackDataServiceStub = jasmine.createSpyObj('feedbackDataService', { @@ -33,7 +33,7 @@ describe('FeedbackContentComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [TranslateModule.forRoot()], - declarations: [FeedbackContentComponent], + declarations: [FeedbackFormComponent], providers: [ { provide: RouteService, useValue: routeServiceStub }, { provide: FormBuilder, useValue: new FormBuilder() }, @@ -46,7 +46,7 @@ describe('FeedbackContentComponent', () => { })); beforeEach(() => { - fixture = TestBed.createComponent(FeedbackContentComponent); + fixture = TestBed.createComponent(FeedbackFormComponent); component = fixture.componentInstance; de = fixture.debugElement; fixture.detectChanges(); diff --git a/src/app/info/feedback/feedback-content/feedback-content.component.ts b/src/app/info/feedback/feedback-form/feedback-form.component.ts similarity index 92% rename from src/app/info/feedback/feedback-content/feedback-content.component.ts rename to src/app/info/feedback/feedback-form/feedback-form.component.ts index 706a82d285..999539449c 100644 --- a/src/app/info/feedback/feedback-content/feedback-content.component.ts +++ b/src/app/info/feedback/feedback-form/feedback-form.component.ts @@ -13,14 +13,14 @@ import { AuthService } from 'src/app/core/auth/auth.service'; import { EPerson } from '../../../core/eperson/models/eperson.model'; @Component({ - selector: 'ds-feedback-content', - templateUrl: './feedback-content.component.html', - styleUrls: ['./feedback-content.component.scss'] + selector: 'ds-feedback-form', + templateUrl: './feedback-form.component.html', + styleUrls: ['./feedback-form.component.scss'] }) /** * Component displaying the contents of the Feedback Statement */ -export class FeedbackContentComponent implements OnInit { +export class FeedbackFormComponent implements OnInit { /** * Form builder created used from the feedback from diff --git a/src/app/info/feedback/feedback.component.html b/src/app/info/feedback/feedback.component.html index 1ab2a75cac..210bdcf1d7 100644 --- a/src/app/info/feedback/feedback.component.html +++ b/src/app/info/feedback/feedback.component.html @@ -1,3 +1,3 @@
- +
\ No newline at end of file diff --git a/src/app/info/info.module.ts b/src/app/info/info.module.ts index 1feb770e0e..61eee71f3a 100644 --- a/src/app/info/info.module.ts +++ b/src/app/info/info.module.ts @@ -9,7 +9,7 @@ import { PrivacyContentComponent } from './privacy/privacy-content/privacy-conte import { ThemedEndUserAgreementComponent } from './end-user-agreement/themed-end-user-agreement.component'; import { ThemedPrivacyComponent } from './privacy/themed-privacy.component'; import { FeedbackComponent } from './feedback/feedback.component'; -import { FeedbackContentComponent } from './feedback/feedback-content/feedback-content.component'; +import { FeedbackFormComponent } from './feedback/feedback-form/feedback-form.component'; import { ThemedFeedbackComponent } from './feedback/themed-feedback.component'; import { FeedbackGuard } from '../core/feedback/feedback.guard'; @@ -22,7 +22,7 @@ const DECLARATIONS = [ PrivacyContentComponent, ThemedPrivacyComponent, FeedbackComponent, - FeedbackContentComponent, + FeedbackFormComponent, ThemedFeedbackComponent ]; diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index d2eeb088a7..eacee6d874 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -1583,6 +1583,8 @@ "info.feedback.send": "Send Feedback", "info.feedback.comments": "Comments", + + "info.feedback.email-label": "Your Email", "info.feedback.create.success" : "Feedback Sent Successfully!",