import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import {Component, DebugElement} from "@angular/core";
import {LoginComponent, User } from './login.component';
import {By} from "@angular/platform-browser";
describe('LoginComponent', () => {
let component: LoginComponent;
let fixture: ComponentFixture<LoginComponent>;
let submitElement: DebugElement;
let loginElement: DebugElement;
let passwordElement: DebugElement;
TestBed.configureTestingModule({
declarations: [LoginComponent]
fixture = TestBed.createComponent(LoginComponent);
component = fixture.componentInstance;
submitElement = fixture.debugElement.query(By.css('button'));
loginElement = fixture.debugElement.query(By.css('input[type=email]'));
passwordElement = fixture.debugElement.query(By.css('input[type=password]'));
it('Setting enabled to false disabled the submit button', () => {
component.enabled = false;
expect(submitElement.nativeElement.disabled).toBeTruthy();
it('Setting enabled to true enables the submit button', () => {
component.enabled = true;
expect(submitElement.nativeElement.disabled).toBeFalsy();
it('Entering email and password emits loggedIn event', () => {
passwordElement.nativeElement.value = "$ystem!1356";
// Subscribe to the Observable and store the user in a local variable.
component.loggedIn.subscribe((value) => user = value);
// This sync emits the event and the subscribe callback gets executed above
submitElement.triggerEventHandler('click', null);
expect(user.password).toBe("$ystem!1356");