import {inject, TestBed} from "@angular/core/testing";
import {BaseRequestOptions, Http} from "@angular/http";
import {MockBackend} from "@angular/http/testing";
import "rxjs/Rx";
import {NetworkService} from "./network.service";
import {UserService} from "./user.service";
import {LoginCredential} from "../../../../common/entities/LoginCredential";


describe('UserService', () => {

  beforeEach(() => {
    TestBed.configureTestingModule({
      providers: [
        MockBackend,
        BaseRequestOptions,
        {
          provide: Http, useFactory: (backend, options) => {
          return new Http(backend, options);
        }, deps: [MockBackend, BaseRequestOptions]
        },
        NetworkService,
        UserService]
    });


    it('should call postJson at login', inject([UserService, NetworkService], (userService, networkService) => {
      spyOn(networkService, "postJson");
      let credential = new LoginCredential("name", "pass");
      userService.login(credential);
      expect(networkService.postJson).toHaveBeenCalled();
      expect(networkService.postJson.calls.argsFor(0)).toEqual(["/user/login", {"loginCredential": credential}]);
    }));

    it('should call getJson at getSessionUser', inject([UserService, NetworkService], (userService, networkService) => {
      spyOn(networkService, "getJson");
      userService.getSessionUser();
      expect(networkService.getJson).toHaveBeenCalled();
      expect(networkService.getJson.calls.argsFor(0)).toEqual(["/user/login"]);
    }));


  });
});