You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

583 lines
18 KiB

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEditor.Collaboration;
using UnityEngine.TestTools;
using NUnit.Framework;
namespace UnityEditor.Collaboration.Tests
{
[TestFixture]
internal class HistoryTests
{
private TestHistoryWindow _window;
private TestRevisionsService _service;
private CollabHistoryPresenter _presenter;
[SetUp]
public void SetUp()
{
_window = new TestHistoryWindow();
_service = new TestRevisionsService();
_presenter = new CollabHistoryPresenter(_window, new CollabHistoryItemFactory(), _service);
}
[TearDown]
public void TearDown()
{
}
[Test]
public void CollabHistoryPresenter_OnUpdatePage__PropagatesRevisionResult()
{
_service.result = new RevisionsResult()
{
Revisions = new List<Revision>()
{
new Revision(authorName: "authorName", comment: "comment", revisionID: "revisionID"),
}
};
_presenter.OnUpdatePage(0);
var item = _window.items.First();
Assert.AreEqual("revisionID", item.id);
Assert.AreEqual("authorName", item.authorName);
Assert.AreEqual("comment", item.comment);
}
[Test]
public void CollabHistoryPresenter_OnUpdatePage__RevisionNumberingIsInOrder()
{
_service.result = new RevisionsResult()
{
RevisionsInRepo = 4,
Revisions = new List<Revision>()
{
new Revision(revisionID: "0"),
new Revision(revisionID: "1"),
new Revision(revisionID: "2"),
new Revision(revisionID: "3"),
}
};
_presenter.OnUpdatePage(0);
var items = _window.items.ToArray();
Assert.AreEqual(4, items[0].index);
Assert.AreEqual(3, items[1].index);
Assert.AreEqual(2, items[2].index);
Assert.AreEqual(1, items[3].index);
}
[Test]
public void CollabHistoryPresenter_OnUpdatePage__RevisionNumberingChangesForMorePages()
{
_service.result = new RevisionsResult()
{
RevisionsInRepo = 12,
Revisions = new List<Revision>()
{
new Revision(revisionID: "0"),
new Revision(revisionID: "1"),
new Revision(revisionID: "2"),
new Revision(revisionID: "3"),
new Revision(revisionID: "4"),
}
};
_presenter.OnUpdatePage(1);
var items = _window.items.ToArray();
Assert.AreEqual(12, items[0].index);
Assert.AreEqual(11, items[1].index);
Assert.AreEqual(10, items[2].index);
Assert.AreEqual(9, items[3].index);
Assert.AreEqual(8, items[4].index);
}
[Test]
public void CollabHistoryPresenter_OnUpdatePage__ObtainedIsCalculated()
{
_service.result = new RevisionsResult()
{
Revisions = new List<Revision>()
{
new Revision(isObtained: false),
new Revision(isObtained: true),
}
};
_presenter.OnUpdatePage(0);
var items = _window.items.ToArray();
Assert.IsFalse(items[0].obtained);
Assert.IsTrue(items[1].obtained);
}
[Test]
public void CollabHistoryPresenter_OnUpdatePage__CurrentIsCalculated()
{
_service.result = new RevisionsResult()
{
Revisions = new List<Revision>()
{
new Revision(revisionID: "1"),
new Revision(revisionID: "2"),
new Revision(revisionID: "3"),
}
};
_service.tipRevision = "2";
_presenter.OnUpdatePage(0);
var items = _window.items.ToArray();
Assert.AreEqual(false, items[0].current);
Assert.AreEqual(true, items[1].current);
Assert.AreEqual(false, items[2].current);
}
[Test]
public void CollabHistoryPresenter_OnUpdatePage__InProgressIsCalculated()
{
_service.result = new RevisionsResult()
{
Revisions = new List<Revision>()
{
new Revision(revisionID: "1"),
new Revision(revisionID: "2"),
new Revision(revisionID: "3"),
}
};
_window.inProgressRevision = "2";
_presenter.OnUpdatePage(0);
var items = _window.items.ToArray();
Assert.IsFalse(items[0].inProgress);
Assert.IsTrue(items[1].inProgress);
Assert.IsFalse(items[2].inProgress);
}
[Test]
public void CollabHistoryPresenter_OnUpdatePage__EnabledIsCalculated()
{
_service.result = new RevisionsResult()
{
Revisions = new List<Revision>()
{
new Revision(revisionID: "0"),
}
};
_window.revisionActionsEnabled = true;
_presenter.OnUpdatePage(0);
var item = _window.items.First();
Assert.AreEqual(true, item.enabled);
}
[Test]
public void CollabHistoryPresenter_OnUpdatePage__DisabledIsCalculated()
{
_service.result = new RevisionsResult()
{
Revisions = new List<Revision>()
{
new Revision(revisionID: "0"),
}
};
_window.revisionActionsEnabled = false;
_presenter.OnUpdatePage(0);
var item = _window.items.First();
Assert.AreEqual(false, item.enabled);
}
[Test]
public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasNoneWhenNotTip()
{
_service.result = new RevisionsResult()
{
Revisions = new List<Revision>()
{
new Revision(revisionID: "1"),
}
};
_service.tipRevision = "0";
_presenter.BuildServiceEnabled = false;
_presenter.OnUpdatePage(0);
var item = _window.items.First();
Assert.AreEqual(BuildState.None, item.buildState);
}
[Test]
public void CollabHistoryPresenter_OnUpdatePage__BuildStateTipHasNoneWhenEnabled()
{
_service.result = new RevisionsResult()
{
Revisions = new List<Revision>()
{
new Revision(revisionID: "0"),
}
};
_service.tipRevision = "0";
_presenter.BuildServiceEnabled = true;
_presenter.OnUpdatePage(0);
var item = _window.items.First();
Assert.AreEqual(BuildState.None, item.buildState);
}
[Test]
public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasConfigureWhenTip()
{
_service.result = new RevisionsResult()
{
Revisions = new List<Revision>()
{
new Revision(revisionID: "0"),
}
};
_service.tipRevision = "0";
_presenter.BuildServiceEnabled = false;
_presenter.OnUpdatePage(0);
var item = _window.items.First();
Assert.AreEqual(BuildState.Configure, item.buildState);
}
[Test]
public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasConfigureWhenZeroBuildStatus()
{
_service.result = new RevisionsResult()
{
Revisions = new List<Revision>()
{
new Revision(revisionID: "0"),
}
};
_service.tipRevision = "0";
_presenter.BuildServiceEnabled = false;
_presenter.OnUpdatePage(0);
var item = _window.items.First();
Assert.AreEqual(BuildState.Configure, item.buildState);
}
[Test]
public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasNoneWhenZeroBuildStatuses()
{
_service.result = new RevisionsResult()
{
Revisions = new List<Revision>()
{
new Revision(revisionID: "0"),
}
};
_service.tipRevision = "0";
_presenter.BuildServiceEnabled = true;
_presenter.OnUpdatePage(0);
var item = _window.items.First();
Assert.AreEqual(BuildState.None, item.buildState);
}
[Test]
public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasSuccessWhenCompleteAndSucceeded()
{
_service.result = new RevisionsResult()
{
Revisions = new List<Revision>()
{
new Revision
(
revisionID: "0",
buildStatuses: new CloudBuildStatus[1]
{
new CloudBuildStatus(complete: true, success: true),
}
),
}
};
_service.tipRevision = "0";
_presenter.BuildServiceEnabled = true;
_presenter.OnUpdatePage(0);
var item = _window.items.First();
Assert.AreEqual(BuildState.Success, item.buildState);
}
[Test]
public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasInProgress()
{
_service.result = new RevisionsResult()
{
Revisions = new List<Revision>()
{
new Revision
(
revisionID: "0",
buildStatuses: new CloudBuildStatus[1]
{
new CloudBuildStatus(complete: false),
}
),
}
};
_service.tipRevision = "0";
_presenter.BuildServiceEnabled = true;
_presenter.OnUpdatePage(0);
var item = _window.items.First();
Assert.AreEqual(BuildState.InProgress, item.buildState);
}
[Test]
public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasFailure()
{
_service.result = new RevisionsResult()
{
Revisions = new List<Revision>()
{
new Revision
(
revisionID: "0",
buildStatuses: new CloudBuildStatus[1]
{
new CloudBuildStatus(complete: true, success: false),
}
),
}
};
_service.tipRevision = "0";
_presenter.BuildServiceEnabled = true;
_presenter.OnUpdatePage(0);
var item = _window.items.First();
Assert.AreEqual(BuildState.Failed, item.buildState);
}
[Test]
public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasFailureWhenAnyBuildsFail()
{
_service.result = new RevisionsResult()
{
Revisions = new List<Revision>()
{
new Revision
(
revisionID: "0",
buildStatuses: new CloudBuildStatus[3]
{
new CloudBuildStatus(complete: true, success: false),
new CloudBuildStatus(complete: true, success: false),
new CloudBuildStatus(complete: true, success: true),
}
),
}
};
_service.tipRevision = "0";
_presenter.BuildServiceEnabled = true;
_presenter.OnUpdatePage(0);
var item = _window.items.First();
Assert.AreEqual(BuildState.Failed, item.buildState);
}
[Test]
public void CollabHistoryPresenter_OnUpdatePage__ChangesPropagateThrough()
{
_service.result = new RevisionsResult()
{
Revisions = new List<Revision>()
{
new Revision(revisionID: "0", entries: GenerateChangeActions(3)),
}
};
_presenter.OnUpdatePage(0);
var item = _window.items.First();
var changes = item.changes.ToList();
Assert.AreEqual("Path0", changes[0].path);
Assert.AreEqual("Path1", changes[1].path);
Assert.AreEqual("Path2", changes[2].path);
}
[Test]
public void CollabHistoryPresenter_OnUpdatePage__ChangesTotalIsCalculated()
{
_service.result = new RevisionsResult()
{
Revisions = new List<Revision>()
{
new Revision(revisionID: "0", entries: GenerateChangeActions(3)),
}
};
_presenter.OnUpdatePage(0);
var item = _window.items.First();
Assert.AreEqual(3, item.changes.Count);
}
[Test]
public void CollabHistoryPresenter_OnUpdatePage__ChangesTruncatedIsCalculated()
{
for (var i = 0; i < 20; i++)
{
_service.result = new RevisionsResult()
{
Revisions = new List<Revision>()
{
new Revision(revisionID: "0", entries: GenerateChangeActions(i)),
}
};
_presenter.OnUpdatePage(0);
var item = _window.items.First();
Assert.AreEqual(i > 10, item.changesTruncated);
}
}
[Test]
public void CollabHistoryPresenter_OnUpdatePage__OnlyKeeps10ChangeActions()
{
_service.result = new RevisionsResult()
{
Revisions = new List<Revision>()
{
new Revision(authorName: "Test", author: "test", entries: GenerateChangeActions(12)),
}
};
_presenter.OnUpdatePage(1);
var item = _window.items.First();
Assert.AreEqual(10, item.changes.Count);
Assert.AreEqual(12, item.changesTotal);
Assert.AreEqual(true, item.changesTruncated);
}
[Test]
public void CollabHistoryPresenter_OnUpdatePage__DeduplicatesMetaFiles()
{
_service.result = new RevisionsResult()
{
Revisions = new List<Revision>()
{
new Revision
(
authorName: "Test",
author: "test",
revisionID: "",
entries: new ChangeAction[2]
{
new ChangeAction(path: "Path1", action: "Action1"),
new ChangeAction(path: "Path1.meta", action: "Action1"),
}
),
}
};
_presenter.OnUpdatePage(1);
var item = _window.items.First();
Assert.AreEqual(1, item.changes.Count);
Assert.AreEqual(1, item.changesTotal);
Assert.AreEqual("Path1", item.changes.First().path);
}
[Test]
public void CollabHistoryPresenter_OnUpdatePage__FolderMetaFilesAreCounted()
{
_service.result = new RevisionsResult()
{
Revisions = new List<Revision>()
{
new Revision
(
authorName: "Test",
author: "test",
entries: new ChangeAction[1]
{
new ChangeAction(path: "Folder1.meta", action: "Action1"),
}
),
}
};
_presenter.OnUpdatePage(1);
var item = _window.items.First();
Assert.AreEqual(1, item.changes.Count);
Assert.AreEqual(1, item.changesTotal);
Assert.AreEqual("Folder1", item.changes.First().path);
}
private static ChangeAction[] GenerateChangeActions(int count)
{
var entries = new ChangeAction[count];
for (var i = 0; i < count; i++)
entries[i] = new ChangeAction(path: "Path" + i, action: "Action" + i);
return entries;
}
}
internal class TestRevisionsService : IRevisionsService
{
public RevisionsResult result;
public event RevisionsDelegate FetchRevisionsCallback;
public string tipRevision { get; set; }
public string currentUser { get; set; }
public void GetRevisions(int offset, int count)
{
if(FetchRevisionsCallback != null)
{
FetchRevisionsCallback(result);
}
}
}
internal class TestHistoryWindow : ICollabHistoryWindow
{
public IEnumerable<RevisionData> items;
public bool revisionActionsEnabled { get; set; }
public int itemsPerPage { get; set; }
public string errMessage { get; set; }
public string inProgressRevision { get; set; }
public PageChangeAction OnPageChangeAction { get; set; }
public RevisionAction OnGoBackAction { get; set; }
public RevisionAction OnUpdateAction { get; set; }
public RevisionAction OnRestoreAction { get; set; }
public ShowBuildAction OnShowBuildAction { get; set; }
public Action OnShowServicesAction { get; set; }
public void UpdateState(HistoryState state, bool force)
{
}
public void UpdateRevisions(IEnumerable<RevisionData> items, string tip, int totalRevisions, int currPage)
{
this.items = items;
}
}
}