diff --git a/src/app/pages/main/main.html b/src/app/pages/main/main.html index 27e6af9..f4a782b 100644 --- a/src/app/pages/main/main.html +++ b/src/app/pages/main/main.html @@ -1,4 +1,14 @@ - - \ No newline at end of file + + + + + + + + + + \ No newline at end of file diff --git a/src/app/pages/main/main.scss b/src/app/pages/main/main.scss index 37c1303..707def2 100644 --- a/src/app/pages/main/main.scss +++ b/src/app/pages/main/main.scss @@ -1,5 +1,8 @@ app-card { - margin-top: 2rem; + &:first-of-type { + margin-top: 2rem; + } + margin-top: 3rem; width: 100%; } @@ -11,3 +14,7 @@ app-contact-form { display: inline-block; padding: 3rem; } + +footer { + margin-top: 60px; +} \ No newline at end of file diff --git a/src/app/pages/main/main.spec.ts b/src/app/pages/main/main.spec.ts index 227fa53..a7038dc 100644 --- a/src/app/pages/main/main.spec.ts +++ b/src/app/pages/main/main.spec.ts @@ -3,15 +3,27 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { Main } from './main'; import { STRINGS_INJECTOR } from '../../app.config'; import { strings } from '../../strings'; +import { ContactService } from './contact.service'; +import { ContactList } from '../../components/contact-list/contact-list'; +import { of } from 'rxjs'; +import { ContactDTO } from '../../models/ContactDTO'; +import { By } from '@angular/platform-browser'; +import { ContactForm } from '../../components/contact-form/contact-form'; describe('Main', () => { let component: Main; let fixture: ComponentFixture
; - + let contactService: jasmine.SpyObj; + beforeEach(async () => { + contactService = jasmine.createSpyObj(ContactList.name, ['getAll', 'save']); + contactService.getAll.and.returnValue(of([])); await TestBed.configureTestingModule({ imports: [Main], - providers: [{ provide: STRINGS_INJECTOR, useValue: strings }], + providers: [ + { provide: STRINGS_INJECTOR, useValue: strings }, + { provide: ContactService, useValue: contactService } + ], }).compileComponents(); fixture = TestBed.createComponent(Main); component = fixture.componentInstance; @@ -21,4 +33,13 @@ describe('Main', () => { it('should create', () => { expect(component).toBeTruthy(); }); + + it('should call save on contact event', () => { + contactService.save.and.returnValue(of([])); + const saveSpy = spyOn(component, 'save').and.callThrough(); + const CONTACT_MOCK = new ContactDTO() + const contactForm: ContactForm = fixture.debugElement.query(By.css('app-contact-form')).componentInstance; + contactForm.contact.emit(CONTACT_MOCK); + expect(saveSpy).toHaveBeenCalledOnceWith(CONTACT_MOCK); + }); }); diff --git a/src/app/pages/main/main.ts b/src/app/pages/main/main.ts index 716572b..b78d062 100644 --- a/src/app/pages/main/main.ts +++ b/src/app/pages/main/main.ts @@ -1,11 +1,25 @@ -import { Component } from '@angular/core'; +import { Component, inject } from '@angular/core'; import { Card } from '../../components/card/card'; import { ContactForm } from '../../components/contact-form/contact-form'; +import { ContactList } from '../../components/contact-list/contact-list'; +import { ContactService } from './contact.service'; +import { ContactDTO } from '../../models/ContactDTO'; +import { FormHeader } from '../../components/form-header/form-header'; +import { STRINGS_INJECTOR } from '../../app.config'; +import { UpperfirstPipe } from '../../pipes/upperfirst-pipe'; +import { MainHeader } from '../../components/main-header/main-header'; @Component({ selector: 'app-main', - imports: [Card, ContactForm], + imports: [Card, ContactForm, ContactList, FormHeader, MainHeader, UpperfirstPipe], templateUrl: './main.html', styleUrl: './main.scss', }) -export class Main {} +export class Main { + private readonly contactService = inject(ContactService); + protected readonly strings = inject(STRINGS_INJECTOR); + + save(contactDTO: ContactDTO) { + this.contactService.save(contactDTO).subscribe(); + } +}