import { ComponentFixture, TestBed } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { Component } from '@angular/core';
import { BixiTimeModule } from './time.module';
import * as moment from 'dayjs';
import { NzSafeAny } from 'ng-zorro-antd/core/types';

const dayjs = moment as NzSafeAny;
const time = 1599016962923;
const format = 'YYYY/MM/DD HH:mm';
const relative = (dayjs(time) as NzSafeAny).fromNow();
const absolute = dayjs(time).format(format);

describe('#@bixi/core bix-time', () => {
  let fixture: ComponentFixture<TestComponent>;
  beforeEach(() => {
    TestBed.configureTestingModule({
      imports: [BixiTimeModule],
      declarations: [TestComponent],
    });
    fixture = TestBed.createComponent(TestComponent);
    fixture.detectChanges();
  });

  function getTimeStr() {
    const dom = fixture.debugElement.query(By.css('.bixi-time'));
    return dom.nativeElement.textContent.trim();
  }
  it('#invalid time', () => {
    fixture.componentInstance.time = 'xjxhsjhgbh';
    fixture.detectChanges();
    expect(getTimeStr()).toBe('-');
  });

  it('#string time', () => {
    fixture.componentInstance.time = '2020-09-01T20:09:20';
    fixture.componentInstance.relative = false;
    fixture.detectChanges();
    expect(getTimeStr()).toBe('2020/09/01 20:09');
  })
  it('#absolute time', () => {
    expect(getTimeStr()).toBe(absolute);
  });

  it('#relative time', () => {
    fixture.componentInstance.relative = true;
    fixture.detectChanges();
    expect(getTimeStr()).toBe(relative);
  });

  it('#format', () => {
    fixture.componentInstance.format = 'YYYY/MM HH:mm';
    fixture.detectChanges();
    expect(getTimeStr()).toBe(dayjs(time).format('YYYY/MM HH:mm'));
  });
  // TODO: add tooltiip test
});


@Component({
  template: `
    <bixi-time [time]="time" [relative]="relative" [format]="format"></bixi-time>
  `,
})
class TestComponent {
  time: string | number = time;
  relative = false;
  format = format;
}
