private async Task <TestSet> CheckForDiscrepancy(TestSet sourceTestSet)
        {
            // Default to failed test

            // Set the team type to search for opposite to the one being posted.
            var searchTeamType = sourceTestSet.TestTeamType == "D" ? "F" : "D";

            // TODO: This result could hold more than one testSet. We need to make sure that only one testSet exists.
            var foundTestSets = _context.TestSets.Where(ts => ts.TileId == sourceTestSet.TileId &&
                                                        ts.ScenarioId == sourceTestSet.ScenarioId &&
                                                        ts.TestTeamType == searchTeamType)
                                .OrderByDescending(ts => ts.CreatedAt);

            TestSet foundTestSet;

            if (searchTeamType == "F")
            {
                foundTestSet =
                    foundTestSets.ToList().FirstOrDefault(ts => ts.FieldTeamNumber == sourceTestSet.FieldTeamNumber);
            }
            else
            {
                foundTestSet = foundTestSets.FirstOrDefault();
            }

            // If no other test set was found from the opposing team then the test set is missing.
            // Else a testSet was found so continue with checks.
            if (!foundTestSets.Any() || foundTestSet == null)
            {
                sourceTestSet.DiscrepancyTypeId = DiscrepancyTypeEnum.Missing.ToString();
            }
            else
            {
                if (foundTestSet.TestPointAttempts == null)
                {
                    foundTestSet.TestPointAttempts =
                        await _context.TestPointAttempts.Where(tpa => tpa.TestSetId == foundTestSet.Id).ToListAsync();
                }

                var matchingTestSets = CompareTestPointAttempts(sourceTestSet.TestPointAttempts,
                                                                foundTestSet.TestPointAttempts);

                if (!matchingTestSets)
                {
                    sourceTestSet.DiscrepancyTypeId    = DiscrepancyTypeEnum.Discrepancy.ToString();
                    sourceTestSet.DiscrepancyTestSetId = foundTestSet.Id;
                    foundTestSet.DiscrepancyTypeId     = DiscrepancyTypeEnum.Discrepancy.ToString();
                    foundTestSet.DiscrepancyTestSetId  = sourceTestSet.Id;

                    _context.TestSets.AddOrUpdate(foundTestSet);

                    _context.SaveChanges();
                }
                else
                {
                    sourceTestSet.DiscrepancyTypeId = DiscrepancyTypeEnum.None.ToString();

                    foundTestSet.DiscrepancyTypeId    = DiscrepancyTypeEnum.None.ToString();
                    foundTestSet.DiscrepancyTestSetId = "";
                    _context.TestSets.AddOrUpdate(foundTestSet);
                    _context.SaveChanges();
                }
            }

            // If a discrepancy is found update the client apps via SignalR
            if (sourceTestSet.DiscrepancyTypeId != DiscrepancyTypeEnum.None.ToString())
            {
                var subArea = await _context.SubAreas.Where(s => s.Id == sourceTestSet.SubAreaId).FirstOrDefaultAsync();

                var area = await _context.Areas.Where(a => a.Id == subArea.AreaId).FirstOrDefaultAsync();

                _clientService.NotifyTeamsOfDiscrepancy(area.Id, subArea.Id, sourceTestSet.FieldTeamNumber);
            }

            // Make sure to delete TPAs before insert because client will push them up again
            if (sourceTestSet.TestPointAttempts != null)
            {
                sourceTestSet.TestPointAttempts = null;
            }
            return(sourceTestSet);
        }