import { TestBed } from '@angular/core/testing'

import {
  HttpClientTestingModule,
  HttpTestingController,
} from '@angular/common/http/testing'
import { environment } from 'src/environments/environment'
import { TrashService } from './trash.service'

describe('TrashService', () => {
  let service: TrashService
  let httpTestingController: HttpTestingController

  beforeEach(() => {
    TestBed.configureTestingModule({
      imports: [HttpClientTestingModule],
    })
    service = TestBed.inject(TrashService)
    httpTestingController = TestBed.inject(HttpTestingController)
  })

  it('should call correct endpoint for getTrash', () => {
    service.getTrash().subscribe()
    const req = httpTestingController.expectOne(
      `${environment.apiBaseUrl}trash/?page=1`
    )
    expect(req.request.method).toEqual('GET')
  })

  it('should call correct endpoint for emptyTrash', () => {
    service.emptyTrash().subscribe()
    const req = httpTestingController.expectOne(
      `${environment.apiBaseUrl}trash/`
    )
    expect(req.request.method).toEqual('POST')
    expect(req.request.body).toEqual({ action: 'empty' })

    service.emptyTrash([1, 2, 3]).subscribe()
    const req2 = httpTestingController.expectOne(
      `${environment.apiBaseUrl}trash/`
    )
    expect(req2.request.body).toEqual({
      action: 'empty',
      documents: [1, 2, 3],
    })
  })

  it('should call correct endpoint for restoreDocuments', () => {
    service.restoreDocuments([1, 2, 3]).subscribe()
    const req = httpTestingController.expectOne(
      `${environment.apiBaseUrl}trash/`
    )
    expect(req.request.method).toEqual('POST')
    expect(req.request.body).toEqual({
      action: 'restore',
      documents: [1, 2, 3],
    })
  })
})
