Skip to content

Commit

Permalink
TD-4789-Unit tests added for ManageOptionalCompetencies with flags an…
Browse files Browse the repository at this point in the history
…d SelfAssessmentOverview with optional competencies
  • Loading branch information
Auldrin-Possa committed Oct 15, 2024
1 parent 7eef360 commit c4cf94d
Showing 1 changed file with 85 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@
using System.Collections.ObjectModel;
using System.Linq;
using DigitalLearningSolutions.Data.Models.SelfAssessments;
using DigitalLearningSolutions.Data.Models.Supervisor;
using DigitalLearningSolutions.Data.Models.User;
using DigitalLearningSolutions.Web.Tests.TestHelpers;
using DigitalLearningSolutions.Web.ViewModels.Common.SearchablePage;
using DigitalLearningSolutions.Web.ViewModels.LearningPortal.Current;
Expand Down Expand Up @@ -274,7 +272,7 @@ public void SelfAssessmentCompetency_Post_Redirects_To_Next_Question()
[Test]
public void SelfAssessmentCompetency_Post_without_self_assessment_should_return_403()
{
var assessmentQuestion = new List<AssessmentQuestion>();
var assessmentQuestion = new List<AssessmentQuestion>();
// Given
A.CallTo(() => selfAssessmentService.GetSelfAssessmentForCandidateById(DelegateUserId, SelfAssessmentId))
.Returns(null);
Expand Down Expand Up @@ -423,6 +421,44 @@ public void SelfAssessmentOverview_Should_Return_View()
.Model.Should().BeEquivalentTo(expectedModel);
}

[Test]
public void SelfAssessmentOverview_Should_Return_View_With_Optional_Competency()
{
// Given
var selfAssessment = SelfAssessmentTestHelper.CreateDefaultSelfAssessment();
var appliedFilterViewModel = new List<AppliedFilterViewModel>();
var competencies = new List<Competency>
{
new Competency { CompetencyGroup = "A", Id = 1, CompetencyGroupID = 1,SelfAssessmentStructureId=1, Optional = true },
new Competency { CompetencyGroup = "A", Id = 2, CompetencyGroupID = 1,SelfAssessmentStructureId=1, Optional = false },
};
var supervisorSignOffs = new List<SupervisorSignOff>();
var expectedModel = new SelfAssessmentOverviewViewModel
{
SelfAssessment = selfAssessment,
CompetencyGroups = competencies.GroupBy(competency => competency.CompetencyGroup),
PreviousCompetencyNumber = 2,
SupervisorSignOffs = supervisorSignOffs,
SearchViewModel = new SearchSelfAssessmentOverviewViewModel("", SelfAssessmentId, selfAssessment.Vocabulary!, false, false, appliedFilterViewModel),
AllQuestionsVerifiedOrNotRequired = true
};
A.CallTo(() => selfAssessmentService.GetSelfAssessmentForCandidateById(DelegateUserId, SelfAssessmentId))
.Returns(selfAssessment);
A.CallTo(() => selfAssessmentService.GetMostRecentResults(selfAssessment.Id, DelegateUserId))
.Returns(competencies);

// When
var result = controller.SelfAssessmentOverview(SelfAssessmentId, selfAssessment.Vocabulary!);

// Then
result.Should().BeViewResult()
.WithViewName("SelfAssessments/SelfAssessmentOverview")
.Model.Should().BeEquivalentTo(expectedModel);

result.Should().BeViewResult().ModelAs<SelfAssessmentOverviewViewModel>().CompetencyGroups.ToList()[0].ToList()[0].Optional.Should().Be(true);
result.Should().BeViewResult().ModelAs<SelfAssessmentOverviewViewModel>().CompetencyGroups.ToList()[0].ToList()[1].Optional.Should().Be(false);
}

[Test]
public void SelfAssessmentOverview_action_should_update_last_accessed()
{
Expand Down Expand Up @@ -692,5 +728,51 @@ public void WithdrawSupervisorSignOffRequest_calls_remove_sign_off_and_defaults_
.BeRedirectToActionResult()
.WithActionName("SelfAssessmentOverview");
}

[Test]
public void ManageOptionalCompetencies_Should_Return_View_With_Flag()
{
// Given
var selfAssessment = SelfAssessmentTestHelper.CreateDefaultSelfAssessment();
var appliedFilterViewModel = new List<AppliedFilterViewModel>();
var CompetencyFlags = new List<Data.Models.Frameworks.CompetencyFlag> { new Data.Models.Frameworks.CompetencyFlag { CompetencyId = 1, FlagId = 1, FlagGroup = "Purple", FlagName = "Supernumerary", FlagTagClass = "nhsuk-tag--purple", FrameworkId = 1, Selected = true }, };

var optionalCompetencies = new List<Competency>
{
new Competency { CompetencyGroup = "A", Id = 1, CompetencyGroupID = 1,SelfAssessmentStructureId=1, Optional = true },
new Competency { CompetencyGroup = "A", Id = 2, CompetencyGroupID = 1,SelfAssessmentStructureId=1, Optional = true },
};
var competencyIds = optionalCompetencies.Select(c => c.Id).ToArray();
var includedSelfAssessmentStructureIds = new List<int> { 1, 2 };

A.CallTo(() => selfAssessmentService.GetSelfAssessmentForCandidateById(DelegateUserId, SelfAssessmentId))
.Returns(selfAssessment);
A.CallTo(() => selfAssessmentService.GetCandidateAssessmentOptionalCompetencies(selfAssessment.Id, DelegateUserId))
.Returns(optionalCompetencies);
A.CallTo(() => frameworkService.GetSelectedCompetencyFlagsByCompetecyIds(A<int[]>.That.Matches(ids => ids.Length == 2 && ids[0] == 1 && ids[1] == 2)))
.Returns(CompetencyFlags);
A.CallTo(() => selfAssessmentService.GetCandidateAssessmentIncludedSelfAssessmentStructureIds(selfAssessment.Id, DelegateUserId))
.Returns(includedSelfAssessmentStructureIds);

var model = new ManageOptionalCompetenciesViewModel
{
SelfAssessment = selfAssessment,
CompetencyGroups = optionalCompetencies.GroupBy(competency => competency.CompetencyGroup),
IncludedSelfAssessmentStructureIds = includedSelfAssessmentStructureIds
};

// When
var result = controller.ManageOptionalCompetencies(SelfAssessmentId);

// Then
result.Should().BeViewResult()
.WithViewName("SelfAssessments/ManageOptionalCompetencies")
.Model.Should().BeEquivalentTo(model);

result.Should().BeViewResult().ModelAs<ManageOptionalCompetenciesViewModel>().CompetencyGroups?.ToList()[0].ToList()[0].CompetencyFlags.Count().Should().Be(1);
result.Should().BeViewResult().ModelAs<ManageOptionalCompetenciesViewModel>().CompetencyGroups?.ToList()[0].ToList()[0].CompetencyFlags.ToList()[0].FlagName.Should().Be("Supernumerary");

result.Should().BeViewResult().ModelAs<ManageOptionalCompetenciesViewModel>().CompetencyGroups?.ToList()[0].ToList()[1].CompetencyFlags.Count().Should().Be(0);
}
}
}

0 comments on commit c4cf94d

Please sign in to comment.