public Task TestExistsAsync() {
      var mockInstallationIdController = new Mock<IInstallationIdController>();
      var guid = Guid.NewGuid();
      mockInstallationIdController.Setup(obj => obj.Get()).Returns(guid);

      var controller = new ParseCurrentInstallationController(mockInstallationIdController.Object);
      var installation = new ParseInstallation();

      return controller.SetAsync(installation, CancellationToken.None).OnSuccess(_ => {
        Assert.AreEqual(installation, controller.CurrentInstallation);
        return controller.ExistsAsync(CancellationToken.None);
      }).Unwrap()
      .OnSuccess(t => {
        Assert.IsTrue(t.Result);

        controller.ClearFromMemory();

        return controller.ExistsAsync(CancellationToken.None);
      }).Unwrap()
      .OnSuccess(t => {
        Assert.IsTrue(t.Result);

        controller.ClearFromDisk();

        return controller.ExistsAsync(CancellationToken.None);
      }).Unwrap()
      .OnSuccess(t => {
        Assert.IsFalse(t.Result);
      });
    }
    public void TestConstructor() {
      var mockInstallationIdController = new Mock<IInstallationIdController>();
      var guid = Guid.NewGuid();
      mockInstallationIdController.Setup(obj => obj.Get()).Returns(guid);

      var controller = new ParseCurrentInstallationController(new Mock<IInstallationIdController>().Object);
      Assert.IsNull(controller.CurrentInstallation);
    }