|
|
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using UnityEngine.Experimental.UIElements;
- using NUnit.Framework;
-
- namespace UnityEditor.PackageManager.UI.Tests
- {
- internal class PackageManagerWindowTests : UITests<PackageManagerWindow>
- {
- // Filter change shows correct result
- private Action<IEnumerable<Package>> onPackageChangedEvent; // TODO: We need to have a discussion on event de-registration
- private bool showPreviewPackagesPreviousValue;
-
- [SetUp]
- public void Setup()
- {
- showPreviewPackagesPreviousValue = PackageManagerPrefs.ShowPreviewPackages;
- PackageManagerPrefs.ShowPreviewPackages = true;
- PackageCollection.Instance.SetFilter(PackageFilter.Local);
- SetListPackages(Enumerable.Empty<PackageInfo>());
- SetSearchPackages(Enumerable.Empty<PackageInfo>());
- Factory.ResetOperations();
- }
-
- [TearDown]
- public void TearDown()
- {
- PackageCollection.Instance.OnPackagesChanged -= onPackageChangedEvent;
- PackageManagerPrefs.ShowPreviewPackages = showPreviewPackagesPreviousValue;
- }
-
- [Test]
- public void When_Default_FirstPackageUIElement_HasSelectedClass()
- {
- onPackageChangedEvent = packages =>
- {
- var package = Container.Query(null, "package").First();
-
- Assert.NotNull(package);
- Assert.IsTrue(package.ClassListContains(PackageItem.SelectedClassName));
- };
-
- PackageCollection.Instance.OnPackagesChanged += onPackageChangedEvent;
- SetListPackages(PackageSets.Instance.Many(5, true));
- }
-
- [Test]
- public void When_PackageCollection_Updates_PackageList_Updates()
- {
- var packages = PackageSets.Instance.Outdated();
- var current = packages.ToList().First();
- var latest = packages.ToList().Last();
-
- SetListPackages(packages);
- Factory.AddOperation = new MockAddOperation(Factory, latest);
-
- var package = PackageCollection.Instance.GetPackageByName(current.Name);
-
- onPackageChangedEvent = newpackages =>
- {
- package = PackageCollection.Instance.GetPackageByName(current.Name);
-
- Assert.IsTrue(package.Current.PackageId == latest.PackageId);
-
- var packageItem = Container.Query(null, "package").Build().First();
- var label = packageItem.Q<Label>("packageName");
- var version = packageItem.Q<Label>("packageVersion");
- var state = packageItem.Q<Label>("packageState");
- var hasOutdatedClass = state.ClassListContains(PackageItem.GetIconStateId(PackageState.Outdated));
- Assert.IsTrue(latest.Name == string.Format("com.unity.{0}", label.text));
- Assert.IsTrue(latest.Version == version.text);
- Assert.IsFalse(hasOutdatedClass);
- };
-
- package.AddSignal.OnOperation += operation =>
- {
- operation.OnOperationSuccess += packageInfo =>
- {
- PackageCollection.Instance.OnPackagesChanged += onPackageChangedEvent;
- };
- };
-
- package.Update();
- }
-
- [Test]
- public void When_PackageCollection_Update_Fails_Package_Stay_Current()
- {
- var packages = PackageSets.Instance.Outdated();
- var current = packages.ToList().First();
- var latest = packages.ToList().Last();
-
- SetListPackages(packages);
-
- var error = MakeError(ErrorCode.Unknown, "Fake error");
- Factory.AddOperation = new MockAddOperation(Factory, latest);
- Factory.AddOperation.ForceError = error;
-
- var package = PackageCollection.Instance.GetPackageByName(current.Name);
-
- package.AddSignal.OnOperation += operation =>
- {
- operation.OnOperationError += operationError => { Assert.IsTrue(error == operationError); };
- operation.OnOperationFinalized += () =>
- {
- Assert.IsTrue(package.Current.PackageId ==
- current.PackageId); // Make sure package hasn't been upgraded
-
- var packageItem = Container.Query(null, "package").Build().First();
- var label = packageItem.Q<Label>("packageName");
- var version = packageItem.Q<Label>("packageVersion");
- var state = packageItem.Q<Label>("packageState");
- var hasErrorClass = state.ClassListContains(PackageItem.GetIconStateId(PackageState.Error));
- Assert.IsTrue(current.Name == string.Format("com.unity.{0}", label.text));
- Assert.IsTrue(current.Version == version.text);
- Assert.IsTrue(hasErrorClass);
- };
- };
-
- package.Update();
- }
-
- [Test]
- public void When_PackageCollection_Remove_PackageLists_Updated()
- {
- var packages = PackageSets.Instance.Many(5);
- var current = packages.ToList().First();
-
- SetListPackages(packages);
- var package = PackageCollection.Instance.GetPackageByName(current.Name);
- Assert.IsNotNull(package);
-
- onPackageChangedEvent = allPackages =>
- {
- package = PackageCollection.Instance.GetPackageByName(current.Name);
- Assert.IsNull(package);
- };
-
- PackageCollection.Instance.OnPackagesChanged += onPackageChangedEvent;
-
- package.Remove();
- PackageCollection.Instance.FetchListOfflineCache(true);
- }
-
- [Test]
- public void When_PackageCollection_Remove_Fails_PackageLists_NotUpdated()
- {
- var packages = PackageSets.Instance.Many(5);
- var current = packages.ToList().First();
-
- var error = MakeError(ErrorCode.Unknown, "Fake error");
- Factory.RemoveOperation = new MockRemoveOperation(Factory) {ForceError = error};
- SetListPackages(packages);
- var package = PackageCollection.Instance.GetPackageByName(current.Name);
- Assert.IsNotNull(package);
-
- package.RemoveSignal.OnOperation += operation =>
- {
- operation.OnOperationError += operationError => { Assert.AreEqual(error, operationError); };
- operation.OnOperationFinalized += () =>
- {
- package = PackageCollection.Instance.GetPackageByName(current.Name);
- Assert.IsNotNull(package);
- };
- };
-
- package.Remove();
- }
-
- [Test]
- public void When_Filter_Changes_Shows_Correct_List()
- {
- var packagesLocal = PackageSets.Instance.Many(2);
- var packagesAll = PackageSets.Instance.Many(5);
-
- SetListPackages(packagesLocal);
- SetSearchPackages(packagesAll);
-
- onPackageChangedEvent = packages =>
- {
- foreach (var package in packagesAll)
- {
- Assert.IsTrue(packages.Any(updatePackage => updatePackage.Current == package));
- }
- };
-
- PackageCollection.Instance.OnPackagesChanged += onPackageChangedEvent;
-
- PackageCollection.Instance.SetFilter(PackageFilter.All);
- }
-
- [Test]
- public void ListPackages_UsesCache()
- {
- PackageCollection.Instance.SetFilter(PackageFilter.Local); // Set filter to use list
- SetListPackages(PackageSets.Instance.Many(2));
-
- Assert.IsTrue(PackageCollection.Instance.LatestListPackages.Any()); // Make sure packages are cached
- }
-
- [Test]
- public void SearchPackages_UsesCache()
- {
- PackageCollection.Instance.SetFilter(PackageFilter.All); // Set filter to use search
- SetSearchPackages(PackageSets.Instance.Many(2));
-
- Assert.IsTrue(PackageCollection.Instance.LatestSearchPackages.Any()); // Make sure packages are cached
- }
- }
- }
|