163 lines
17 KiB
C#
163 lines
17 KiB
C#
using NUnit.Framework;
|
|
using System.Collections;
|
|
using System.IO;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
using UnityEngine.TestTools;
|
|
using UnityEngine.UI;
|
|
|
|
/// <summary>
|
|
/// Test the PanelCourseProgress class
|
|
/// </summary>
|
|
[TestFixture]
|
|
public class PanelCourseProgressTests
|
|
{
|
|
/// <summary>
|
|
/// Wait time between scene transitions
|
|
/// </summary>
|
|
private const float WAIT_TIME = 0.2f;
|
|
|
|
/// <summary>
|
|
/// Setup the PanelCourseProgress tests
|
|
/// </summary>
|
|
private IEnumerator Setup_PanelCourseProgress()
|
|
{
|
|
string path = $"{Application.persistentDataPath}/wesign_unit_test.json";
|
|
string course = "{\"entries\":[],\"courseIndex\":0,\"progress\":0.03846153989434242,\"completedLearnables\":1,\"inUseLearnables\":7,\"totalLearnables\":26,\"learnables\":[{\"entries\":[],\"index\":0,\"inUse\":true,\"name\":\"A\",\"progress\":3.0},{\"entries\":[],\"index\":1,\"inUse\":true,\"name\":\"B\",\"progress\":4.5},{\"entries\":[],\"index\":2,\"inUse\":true,\"name\":\"C\",\"progress\":1.5},{\"entries\":[],\"index\":3,\"inUse\":true,\"name\":\"D\",\"progress\":1.5},{\"entries\":[],\"index\":4,\"inUse\":true,\"name\":\"E\",\"progress\":1.5},{\"entries\":[],\"index\":5,\"inUse\":true,\"name\":\"F\",\"progress\":1.5},{\"entries\":[],\"index\":6,\"inUse\":true,\"name\":\"G\",\"progress\":0.0},{\"entries\":[],\"index\":7,\"inUse\":false,\"name\":\"H\",\"progress\":0.0},{\"entries\":[],\"index\":8,\"inUse\":false,\"name\":\"I\",\"progress\":0.0},{\"entries\":[],\"index\":9,\"inUse\":false,\"name\":\"J\",\"progress\":0.0},{\"entries\":[],\"index\":10,\"inUse\":false,\"name\":\"K\",\"progress\":0.0},{\"entries\":[],\"index\":11,\"inUse\":false,\"name\":\"L\",\"progress\":0.0},{\"entries\":[],\"index\":12,\"inUse\":false,\"name\":\"M\",\"progress\":0.0},{\"entries\":[],\"index\":13,\"inUse\":false,\"name\":\"N\",\"progress\":0.0},{\"entries\":[],\"index\":14,\"inUse\":false,\"name\":\"O\",\"progress\":0.0},{\"entries\":[],\"index\":15,\"inUse\":false,\"name\":\"P\",\"progress\":0.0},{\"entries\":[],\"index\":16,\"inUse\":false,\"name\":\"Q\",\"progress\":0.0},{\"entries\":[],\"index\":17,\"inUse\":false,\"name\":\"R\",\"progress\":0.0},{\"entries\":[],\"index\":18,\"inUse\":false,\"name\":\"S\",\"progress\":0.0},{\"entries\":[],\"index\":19,\"inUse\":false,\"name\":\"T\",\"progress\":0.0},{\"entries\":[],\"index\":20,\"inUse\":false,\"name\":\"U\",\"progress\":0.0},{\"entries\":[],\"index\":21,\"inUse\":false,\"name\":\"V\",\"progress\":0.0},{\"entries\":[],\"index\":22,\"inUse\":false,\"name\":\"W\",\"progress\":0.0},{\"entries\":[],\"index\":23,\"inUse\":false,\"name\":\"X\",\"progress\":0.0},{\"entries\":[],\"index\":24,\"inUse\":false,\"name\":\"Y\",\"progress\":0.0},{\"entries\":[],\"index\":25,\"inUse\":false,\"name\":\"Z\",\"progress\":0.0}]}";
|
|
string oneUser = $"{{\"version\":1027,\"users\":[{{\"entries\":[],\"username\":\"Tester0\",\"avatarIndex\":0,\"playtime\":0.0,\"minigames\":[],\"courses\":[{course}]}}],\"currentUser\":0,\"currentMinigame\":0,\"currentCourse\":0,\"currentTheme\":0}}";
|
|
|
|
File.WriteAllText(path, oneUser);
|
|
PersistentDataController.PATH = path;
|
|
PersistentDataController.GetInstance().Load();
|
|
AssetDatabase.LoadAssetAtPath<UserAvatarList>("Assets/Accounts/ScriptableObjects/UserAvatarList.asset").Awake();
|
|
|
|
SystemController.GetInstance().SwapScene("Accounts/Scenes/UserProgressScreen");
|
|
yield return new WaitForSeconds(WAIT_TIME);
|
|
|
|
GameObject.FindObjectOfType<UserProgressScreen>().DisplayCourses();
|
|
yield return new WaitForSeconds(WAIT_TIME);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Setup the PanelCourseProgress tests
|
|
/// </summary>
|
|
private IEnumerator Setup_PanelCourseProgress_Empty()
|
|
{
|
|
string path = $"{Application.persistentDataPath}/wesign_unit_test.json";
|
|
string oneUser = $"{{\"version\":1027,\"users\":[{{\"entries\":[],\"username\":\"Tester0\",\"avatarIndex\":0,\"playtime\":0.0,\"minigames\":[],\"courses\":[]}}],\"currentUser\":0,\"currentMinigame\":0,\"currentCourse\":0,\"currentTheme\":0}}";
|
|
|
|
File.WriteAllText(path, oneUser);
|
|
PersistentDataController.PATH = path;
|
|
PersistentDataController.GetInstance().Load();
|
|
AssetDatabase.LoadAssetAtPath<UserAvatarList>("Assets/Accounts/ScriptableObjects/UserAvatarList.asset").Awake();
|
|
|
|
SystemController.GetInstance().SwapScene("Accounts/Scenes/UserProgressScreen");
|
|
yield return new WaitForSeconds(WAIT_TIME);
|
|
|
|
GameObject.FindObjectOfType<UserProgressScreen>().DisplayCourses();
|
|
yield return new WaitForSeconds(WAIT_TIME);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Setup the PanelCourseProgress tests
|
|
/// </summary>
|
|
private IEnumerator Setup_PanelCourseProgress_Multiple()
|
|
{
|
|
string path = $"{Application.persistentDataPath}/wesign_unit_test.json";
|
|
string courses = "[{\"entries\":[],\"courseIndex\":1,\"progress\":-1.0,\"completedLearnables\":0,\"inUseLearnables\":1,\"totalLearnables\":15,\"learnables\":[{\"entries\":[],\"index\":0,\"inUse\":true,\"name\":\"Tot ziens\",\"progress\":0.0},{\"entries\":[],\"index\":1,\"inUse\":false,\"name\":\"Saluut\",\"progress\":0.0},{\"entries\":[],\"index\":2,\"inUse\":false,\"name\":\"Goedemorgen\",\"progress\":0.0},{\"entries\":[],\"index\":3,\"inUse\":false,\"name\":\"Goedemiddag\",\"progress\":0.0},{\"entries\":[],\"index\":4,\"inUse\":false,\"name\":\"Goed\",\"progress\":0.0},{\"entries\":[],\"index\":5,\"inUse\":false,\"name\":\"Slecht\",\"progress\":0.0},{\"entries\":[],\"index\":6,\"inUse\":false,\"name\":\"Ja\",\"progress\":0.0},{\"entries\":[],\"index\":7,\"inUse\":false,\"name\":\"Links\",\"progress\":0.0},{\"entries\":[],\"index\":8,\"inUse\":false,\"name\":\"Rechts\",\"progress\":0.0},{\"entries\":[],\"index\":9,\"inUse\":false,\"name\":\"Bedanken\",\"progress\":0.0},{\"entries\":[],\"index\":10,\"inUse\":false,\"name\":\"Sorry\",\"progress\":0.0},{\"entries\":[],\"index\":11,\"inUse\":false,\"name\":\"Goedenacht\",\"progress\":0.0},{\"entries\":[],\"index\":12,\"inUse\":false,\"name\":\"Smakelijk\",\"progress\":0.0},{\"entries\":[],\"index\":13,\"inUse\":false,\"name\":\"Goedenavond\",\"progress\":0.0},{\"entries\":[],\"index\":14,\"inUse\":false,\"name\":\"Nee\",\"progress\":0.0}]},{\"entries\":[],\"courseIndex\":0,\"progress\":0.07692307978868485,\"completedLearnables\":2,\"inUseLearnables\":8,\"totalLearnables\":26,\"learnables\":[{\"entries\":[],\"index\":0,\"inUse\":true,\"name\":\"A\",\"progress\":1.5},{\"entries\":[],\"index\":1,\"inUse\":true,\"name\":\"B\",\"progress\":3.0},{\"entries\":[],\"index\":2,\"inUse\":true,\"name\":\"C\",\"progress\":4.5},{\"entries\":[],\"index\":3,\"inUse\":true,\"name\":\"D\",\"progress\":0.0},{\"entries\":[],\"index\":4,\"inUse\":true,\"name\":\"E\",\"progress\":4.5},{\"entries\":[],\"index\":5,\"inUse\":true,\"name\":\"F\",\"progress\":1.5},{\"entries\":[],\"index\":6,\"inUse\":true,\"name\":\"G\",\"progress\":3.0},{\"entries\":[],\"index\":7,\"inUse\":true,\"name\":\"H\",\"progress\":1.5},{\"entries\":[],\"index\":8,\"inUse\":false,\"name\":\"I\",\"progress\":0.0},{\"entries\":[],\"index\":9,\"inUse\":false,\"name\":\"J\",\"progress\":0.0},{\"entries\":[],\"index\":10,\"inUse\":false,\"name\":\"K\",\"progress\":0.0},{\"entries\":[],\"index\":11,\"inUse\":false,\"name\":\"L\",\"progress\":0.0},{\"entries\":[],\"index\":12,\"inUse\":false,\"name\":\"M\",\"progress\":0.0},{\"entries\":[],\"index\":13,\"inUse\":false,\"name\":\"N\",\"progress\":0.0},{\"entries\":[],\"index\":14,\"inUse\":false,\"name\":\"O\",\"progress\":0.0},{\"entries\":[],\"index\":15,\"inUse\":false,\"name\":\"P\",\"progress\":0.0},{\"entries\":[],\"index\":16,\"inUse\":false,\"name\":\"Q\",\"progress\":0.0},{\"entries\":[],\"index\":17,\"inUse\":false,\"name\":\"R\",\"progress\":0.0},{\"entries\":[],\"index\":18,\"inUse\":false,\"name\":\"S\",\"progress\":0.0},{\"entries\":[],\"index\":19,\"inUse\":false,\"name\":\"T\",\"progress\":0.0},{\"entries\":[],\"index\":20,\"inUse\":false,\"name\":\"U\",\"progress\":0.0},{\"entries\":[],\"index\":21,\"inUse\":false,\"name\":\"V\",\"progress\":0.0},{\"entries\":[],\"index\":22,\"inUse\":false,\"name\":\"W\",\"progress\":0.0},{\"entries\":[],\"index\":23,\"inUse\":false,\"name\":\"X\",\"progress\":0.0},{\"entries\":[],\"index\":24,\"inUse\":false,\"name\":\"Y\",\"progress\":0.0},{\"entries\":[],\"index\":25,\"inUse\":false,\"name\":\"Z\",\"progress\":0.0}]},{\"entries\":[],\"courseIndex\":3,\"progress\":0.04545454680919647,\"completedLearnables\":1,\"inUseLearnables\":7,\"totalLearnables\":22,\"learnables\":[{\"entries\":[],\"index\":0,\"inUse\":true,\"name\":\"Aardappel\",\"progress\":4.5},{\"entries\":[],\"index\":1,\"inUse\":true,\"name\":\"Aardbei\",\"progress\":1.5},{\"entries\":[],\"index\":2,\"inUse\":true,\"name\":\"Ajuin\",\"progress\":1.5},{\"entries\":[],\"index\":3,\"inUse\":true,\"name\":\"Appel\",\"progress\":1.5},{\"entries\":[],\"index\":4,\"inUse\":true,\"name\":\"Appelsien\",\"progress\":3.0},{\"entries\":[],\"index\":5,\"inUse\":true,\"name\":\"Banaan\",\"progress\":3.0},{\"entries\":[],\"index\":6,\"inUse\":true,\"name\":\"Bessen\",\"progress\":0.0},{\"entries\":[],\"index\":7,\"inUse\":false,\"name\":\"Bloemkool\",\"progress\":0.0},{\"entries\":[],\"index\":8,\"inUse\":false,\"name\":\"Bonen\",\"progress\":0.0},{\"entries\":[],\"index\":9,\"inUse\":false,\"name\":\"Broccoli\",\"progress\":0.0},{\"entries\":[],\"index\":10,\"inUse\":false,\"name\":\"Champignon\",\"progress\":0.0},{\"entries\":[],\"index\":11,\"inUse\":false,\"name\":\"Erwt\",\"progress\":0.0},{\"entries\":[],\"index\":12,\"inUse\":false,\"name\":\"Kers\",\"progress\":0.0},{\"entries\":[],\"index\":13,\"inUse\":false,\"name\":\"Kiwi\",\"progress\":0.0},{\"entries\":[],\"index\":14,\"inUse\":false,\"name\":\"Komkommer\",\"progress\":0.0},{\"entries\":[],\"index\":15,\"inUse\":false,\"name\":\"Meloen\",\"progress\":0.0},{\"entries\":[],\"index\":16,\"inUse\":false,\"name\":\"Peer\",\"progress\":0.0},{\"entries\":[],\"index\":17,\"inUse\":false,\"name\":\"Perzik\",\"progress\":0.0},{\"entries\":[],\"index\":18,\"inUse\":false,\"name\":\"Pompoen\",\"progress\":0.0},{\"entries\":[],\"index\":19,\"inUse\":false,\"name\":\"Prei\",\"progress\":0.0},{\"entries\":[],\"index\":20,\"inUse\":false,\"name\":\"Tomaat\",\"progress\":0.0},{\"entries\":[],\"index\":21,\"inUse\":false,\"name\":\"Wortel\",\"progress\":0.0}]},{\"entries\":[],\"courseIndex\":2,\"progress\":-1.0,\"completedLearnables\":0,\"inUseLearnables\":4,\"totalLearnables\":22,\"learnables\":[{\"entries\":[],\"index\":0,\"inUse\":true,\"name\":\"Walvis\",\"progress\":0.0},{\"entries\":[],\"index\":1,\"inUse\":true,\"name\":\"Konijn\",\"progress\":0.0},{\"entries\":[],\"index\":2,\"inUse\":true,\"name\":\"Giraf\",\"progress\":0.0},{\"entries\":[],\"index\":3,\"inUse\":true,\"name\":\"Vis\",\"progress\":0.0},{\"entries\":[],\"index\":4,\"inUse\":false,\"name\":\"Schildpad\",\"progress\":0.0},{\"entries\":[],\"index\":5,\"inUse\":false,\"name\":\"Lama\",\"progress\":0.0},{\"entries\":[],\"index\":6,\"inUse\":false,\"name\":\"Dolfijn\",\"progress\":0.0},{\"entries\":[],\"index\":7,\"inUse\":false,\"name\":\"Haai\",\"progress\":0.0},{\"entries\":[],\"index\":8,\"inUse\":false,\"name\":\"Kangoeroe\",\"progress\":0.0},{\"entries\":[],\"index\":9,\"inUse\":false,\"name\":\"Kat\",\"progress\":0.0},{\"entries\":[],\"index\":10,\"inUse\":false,\"name\":\"Hond\",\"progress\":0.0},{\"entries\":[],\"index\":11,\"inUse\":false,\"name\":\"Kip\",\"progress\":0.0},{\"entries\":[],\"index\":12,\"inUse\":false,\"name\":\"Leeuw\",\"progress\":0.0},{\"entries\":[],\"index\":13,\"inUse\":false,\"name\":\"Olifant\",\"progress\":0.0},{\"entries\":[],\"index\":14,\"inUse\":false,\"name\":\"Paard\",\"progress\":0.0},{\"entries\":[],\"index\":15,\"inUse\":false,\"name\":\"Panda\",\"progress\":0.0},{\"entries\":[],\"index\":16,\"inUse\":false,\"name\":\"Papegaai\",\"progress\":0.0},{\"entries\":[],\"index\":17,\"inUse\":false,\"name\":\"Ram\",\"progress\":0.0},{\"entries\":[],\"index\":18,\"inUse\":false,\"name\":\"Tijger\",\"progress\":0.0},{\"entries\":[],\"index\":19,\"inUse\":false,\"name\":\"Varken\",\"progress\":0.0},{\"entries\":[],\"index\":20,\"inUse\":false,\"name\":\"Vos\",\"progress\":0.0},{\"entries\":[],\"index\":21,\"inUse\":false,\"name\":\"Zebra\",\"progress\":0.0}]},{\"entries\":[],\"courseIndex\":6,\"progress\":-1.0,\"completedLearnables\":0,\"inUseLearnables\":4,\"totalLearnables\":16,\"learnables\":[{\"entries\":[],\"index\":0,\"inUse\":true,\"name\":\"Broer\",\"progress\":0.0},{\"entries\":[],\"index\":1,\"inUse\":true,\"name\":\"Dochter\",\"progress\":0.0},{\"entries\":[],\"index\":2,\"inUse\":true,\"name\":\"Echtgenoot\",\"progress\":0.0},{\"entries\":[],\"index\":3,\"inUse\":true,\"name\":\"Familie\",\"progress\":0.0},{\"entries\":[],\"index\":4,\"inUse\":false,\"name\":\"Generatie\",\"progress\":0.0},{\"entries\":[],\"index\":5,\"inUse\":false,\"name\":\"Gezin\",\"progress\":0.0},{\"entries\":[],\"index\":6,\"inUse\":false,\"name\":\"Kind\",\"progress\":0.0},{\"entries\":[],\"index\":7,\"inUse\":false,\"name\":\"Moeder\",\"progress\":0.0},{\"entries\":[],\"index\":8,\"inUse\":false,\"name\":\"Neef\",\"progress\":0.0},{\"entries\":[],\"index\":9,\"inUse\":false,\"name\":\"Nicht\",\"progress\":0.0},{\"entries\":[],\"index\":10,\"inUse\":false,\"name\":\"Oom\",\"progress\":0.0},{\"entries\":[],\"index\":11,\"inUse\":false,\"name\":\"Ouders\",\"progress\":0.0},{\"entries\":[],\"index\":12,\"inUse\":false,\"name\":\"Tante\",\"progress\":0.0},{\"entries\":[],\"index\":13,\"inUse\":false,\"name\":\"Vader\",\"progress\":0.0},{\"entries\":[],\"index\":14,\"inUse\":false,\"name\":\"Zoon\",\"progress\":0.0},{\"entries\":[],\"index\":15,\"inUse\":false,\"name\":\"Zus\",\"progress\":0.0}]}]";
|
|
string oneUser = $"{{\"version\":1027,\"users\":[{{\"entries\":[],\"username\":\"Tester0\",\"avatarIndex\":0,\"playtime\":0.0,\"minigames\":[],\"courses\":{courses}}}],\"currentUser\":0,\"currentMinigame\":0,\"currentCourse\":0,\"currentTheme\":0}}";
|
|
|
|
File.WriteAllText(path, oneUser);
|
|
PersistentDataController.PATH = path;
|
|
PersistentDataController.GetInstance().Load();
|
|
AssetDatabase.LoadAssetAtPath<UserAvatarList>("Assets/Accounts/ScriptableObjects/UserAvatarList.asset").Awake();
|
|
|
|
SystemController.GetInstance().SwapScene("Accounts/Scenes/UserProgressScreen");
|
|
yield return new WaitForSeconds(WAIT_TIME);
|
|
|
|
GameObject.FindObjectOfType<UserProgressScreen>().DisplayCourses();
|
|
yield return new WaitForSeconds(WAIT_TIME);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Cleanup after testing
|
|
/// </summary>
|
|
[TearDown]
|
|
public void TearDown_PanelCourseProgress()
|
|
{
|
|
PersistentDataController.PATH = null;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Test whether every item that needs to be assign in the editor, is assigned
|
|
/// </summary>
|
|
[UnityTest]
|
|
public IEnumerator Test_EditorAssignments()
|
|
{
|
|
yield return Setup_PanelCourseProgress();
|
|
|
|
var panel = GameObject.FindObjectOfType<PanelCourseProgress>();
|
|
Assert.IsNotNull(panel);
|
|
Assert.IsNotNull(panel.courseList);
|
|
Assert.IsNotNull(panel.courseCardPrefab);
|
|
Assert.IsNotNull(panel.coursesContainer);
|
|
Assert.IsNotNull(panel.courseInfo);
|
|
Assert.IsNotNull(panel.emptyCourses);
|
|
Assert.IsNotNull(panel.courseTitle);
|
|
Assert.IsNotNull(panel.learnableCardPrefab);
|
|
Assert.IsNotNull(panel.learnablesContainer);
|
|
Assert.IsNotNull(panel.progressBar);
|
|
}
|
|
|
|
[UnityTest]
|
|
public IEnumerator Test_Start()
|
|
{
|
|
yield return Setup_PanelCourseProgress();
|
|
|
|
var panel = GameObject.FindObjectOfType<PanelCourseProgress>();
|
|
Assert.IsTrue(panel.courseInfo.gameObject.activeSelf);
|
|
Assert.IsFalse(panel.emptyCourses.gameObject.activeSelf);
|
|
|
|
var course = panel.courseList.GetCourseByIndex(CourseIndex.FINGERSPELLING);
|
|
var progress = UserList.GetCurrentUser().GetCourseProgress(CourseIndex.FINGERSPELLING);
|
|
Assert.AreEqual(course.title, panel.courseTitle.text);
|
|
Assert.AreEqual(progress.progress, panel.progressBar.fillAmount);
|
|
Assert.AreEqual(course.theme.learnables.Count, panel.learnablesContainer.childCount);
|
|
}
|
|
|
|
[UnityTest]
|
|
public IEnumerator Test_Start_Empty()
|
|
{
|
|
yield return Setup_PanelCourseProgress_Empty();
|
|
|
|
var panel = GameObject.FindObjectOfType<PanelCourseProgress>();
|
|
Assert.IsFalse(panel.courseInfo.gameObject.activeSelf);
|
|
Assert.IsTrue(panel.emptyCourses.gameObject.activeSelf);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Test whether we can select a course
|
|
/// </summary>
|
|
[UnityTest]
|
|
public IEnumerator Test_UpdateSelection()
|
|
{
|
|
yield return Setup_PanelCourseProgress_Multiple();
|
|
|
|
var panel = GameObject.FindObjectOfType<PanelCourseProgress>();
|
|
var courses = GameObject.FindObjectsOfType<CourseProgressCard>();
|
|
|
|
var currentCourse = courses[0];
|
|
currentCourse.selectActivity.Invoke();
|
|
yield return new WaitForSeconds(WAIT_TIME);
|
|
|
|
Assert.AreEqual(Color.blue, currentCourse.GetComponent<Image>().color);
|
|
for (int i = 1; i < courses.Length; i++)
|
|
Assert.AreEqual(Color.gray, courses[i].GetComponent<Image>().color);
|
|
|
|
Assert.AreEqual(currentCourse.title.text, panel.courseTitle.text);
|
|
Assert.AreEqual(0.0f, panel.progressBar.fillAmount);
|
|
Assert.AreEqual(currentCourse.courseProgress.learnables.Count, panel.learnablesContainer.childCount);
|
|
}
|
|
}
|