static IEnumerable <QueryPreflightCheckResult> Project <T>(this IEnumerable <IGrouping <T, QueryPreflightCheckResultRecord> > grouped) { return(grouped.Select(g => { var f = g.First(); return new QueryPreflightCheckResult { QueryRef = new QueryRef(f.QueryId, QueryUrn.From(f.QueryUniversalId)), Ver = f.QueryVer, IsPresent = f.QueryIsPresent, IsAuthorized = f.QueryIsAuthorized, ConceptCheck = new ConceptPreflightCheck { Results = g.Where(c => c.ConceptId.HasValue) .Select(c => new ConceptPreflightCheckResult { Id = c.ConceptId, UniversalId = ConceptUrn.From(c.ConceptUniversalId), IsPresent = c.ConceptIsPresent, IsAuthorized = c.ConceptIsAuthorized }) } }; })); }
public async Task <IEnumerable <BaseQuery> > GetUserQueriesAsync(string userId) { using (var cn = new SqlConnection(opts.ConnectionString)) { await cn.OpenAsync(); var records = await cn.QueryAsync <BaseQueryRecord>( Sql.SavedQueriesByOwner, new { user = userId }, commandType : CommandType.StoredProcedure, commandTimeout : opts.DefaultTimeout ); return(records.Select(r => new BaseQuery { Id = r.Id, UniversalId = QueryUrn.From(r.UniversalId), Name = r.Name, Category = r.Category, Owner = r.Owner, Created = r.Created, Updated = r.Updated, Count = r.Count })); } }
public void SetUniversalId(string urn) { if (!string.IsNullOrWhiteSpace(urn)) { UniversalId = QueryUrn.From(urn); } }
public async Task <QueryDeleteResult> Delete(QueryUrn uid, bool force) { logger.LogInformation("Deleting query. Query:{Query}", uid.ToString()); using (var cn = new SqlConnection(dbOpts.ConnectionString)) { await cn.OpenAsync(); try { var dependents = await cn.QueryAsync <QueryDependentRecord>( deleteQuery, new { uid = uid.ToString(), force, user = user.UUID }, commandType : CommandType.StoredProcedure, commandTimeout : dbOpts.DefaultTimeout ); return(QueryDeleteResult.From(dependents.Select(d => { return new QueryDependent(d.Id, QueryUrn.From(d.UniversalId), d.Name, d.Owner); }))); } catch (SqlException se) { logger.LogError("Could not delete query. Query:{Query} Code:{Code} Error:{Error}", uid.ToString(), se.ErrorCode, se.Message); se.MapThrow(); throw; } } }
public async Task <IEnumerable <BaseQuery> > GetQueries() { logger.LogInformation("Getting queries"); using (var cn = new SqlConnection(dbOpts.ConnectionString)) { await cn.OpenAsync(); var records = await cn.QueryAsync <BaseQueryRecord>( queryQueries, new { user = user.UUID, groups = GroupMembership.From(user) }, commandType : CommandType.StoredProcedure, commandTimeout : dbOpts.DefaultTimeout ); return(records.Select(r => new BaseQuery { Id = r.Id, UniversalId = QueryUrn.From(r.UniversalId), Name = r.Name, Category = r.Category, Owner = r.Owner, Created = r.Created, Updated = r.Updated, Count = r.Count })); } }
public void Errors_Should_Return_Null_If_Ok() { var qpcr = new QueryPreflightCheckResult { QueryRef = new QueryRef(QueryUrn.From("urn:leaf:query:d7359679-df0d-4604-a2d9-1d3d04417dc2:123456")), IsPresent = true, IsAuthorized = true, ConceptCheck = new ConceptPreflightCheck { Results = new ConceptPreflightCheckResult[] { new ConceptPreflightCheckResult { Id = Guid.NewGuid(), UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.42"), IsPresent = true, IsAuthorized = true }, new ConceptPreflightCheckResult { Id = Guid.NewGuid(), UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.45"), IsPresent = true, IsAuthorized = true } } } }; Assert.Null(qpcr.Errors()); }
public async Task <ActionResult <QueryDeleteResultDTO> > Delete(string ident, [FromQuery] bool force) { try { var urn = QueryUrn.From(ident); var result = await queryService.Delete(urn, force); if (!result.Ok) { return(Conflict(QueryDeleteResultDTO.From(result.Dependents))); } return(Ok()); } catch (FormatException fe) { log.LogError("Malformed query identifer. UniversalId:{UniversalId} Error:{Error}", ident, fe.Message); return(BadRequest()); } catch (LeafDbException lde) { return(StatusCode(lde.StatusCode)); } catch (Exception e) { log.LogError("Could not delete query. UniversalId:{UniversalId} Error:{Error}", ident, e.ToString()); return(StatusCode(StatusCodes.Status500InternalServerError)); } }
public async Task <Query> GetQueryAsync(QueryUrn urn) { log.LogInformation("Getting query. UId:{UId}", urn); try { var query = await service.GetQueryAsync(urn); if (query == null) { log.LogError("Could not find query. UId:{UId}", urn); } else { log.LogInformation("Found query. Id:{Id} UId:{UId}", query.Id, query.UniversalId); } if (HideCount) { query.Count = null; } return(query); } catch (DbException de) { log.LogError("Failed to get query. UniversalId:{UniversalId} Code:{Code} Error:{Error}", urn, de.ErrorCode, de.Message); de.MapThrow(); throw; } }
public async Task <Query> GetQueryAsync(QueryUrn uid) { using (var cn = new SqlConnection(dbOpts.ConnectionString)) { await cn.OpenAsync(); var r = await cn.QueryFirstOrDefaultAsync <QueryRecord>( queryQueryByUId, new { uid = uid.ToString(), user = user.UUID, groups = GroupMembership.From(user), admin = user.IsAdmin }, commandType : CommandType.StoredProcedure, commandTimeout : dbOpts.DefaultTimeout ); return(new Query { Id = r.Id, UniversalId = QueryUrn.From(r.UniversalId), Name = r.Name, Category = r.Category, Owner = r.Owner, Created = r.Created, Updated = r.Updated, Count = r.Count, Definition = r.Definition }); } }
public async Task <QuerySaveResult> InitialSaveAsync(QuerySave query) { var urn = QueryUrn.Create(query.QueryId); var conceptids = query.Resources.Concepts.Select(c => c.Id.Value).Where(c => c != Guid.Empty); var queryids = query.Resources.Queries.Select(q => q.Id.Value); using (var cn = new SqlConnection(dbOpts.ConnectionString)) { await cn.OpenAsync(); var qsr = await cn.QueryFirstOrDefaultAsync <QuerySaveResultRecord>( initialQuerySave, new { queryid = query.QueryId, urn = urn.ToString(), name = query.Name, category = query.Category, conceptids = ResourceIdTable.From(conceptids), queryids = ResourceIdTable.From(queryids), definition = query.Definition, user = user.UUID }, commandType : CommandType.StoredProcedure, commandTimeout : dbOpts.DefaultTimeout ); if (qsr == null) { return(null); } return(new QuerySaveResult(query.QueryId, QueryUrn.From(qsr.UniversalId), qsr.Ver)); } }
public void QueryUrn_Create_Ok() { var id = Guid.NewGuid(); var urn = QueryUrn.Create(id); Assert.Contains(id.ToString(), urn.ToString()); }
public void QueryUrn_From_Query_Urn_Ok() { var urn = $"urn:leaf:query:{Guid.NewGuid()}:12318742"; var curn = QueryUrn.From(urn); Assert.Equal(urn, curn.ToString()); }
public void QueryUrn_TryParse_From_Query_Urn_Ok() { var urn = $"urn:leaf:query:{Guid.NewGuid()}:12318742"; var ok = QueryUrn.TryParse(urn, out var _); Assert.True(ok); }
public async Task <ActionResult <QuerySaveResponseDTO> > Save( string id, [FromBody] QuerySaveDTO querySave, CancellationToken cancelToken ) { try { // federated user submitting an initial save request if (!user.IsInstutional && QueryUrn.From(querySave.UniversalId) == null) { return(BadRequest("Initial save requests must be made to home node.")); } var result = await manager.SaveAsync(new Guid(id), querySave, QueryDefinitionDTO.JSON, cancelToken); switch (result.State) { case QueryManager.SaveState.Preflight: return(BadRequest(new QuerySaveResponseDTO { Preflight = new PreflightCheckDTO(result.Preflight) })); case QueryManager.SaveState.NotFound: return(NotFound()); } return(Ok(new QuerySaveResponseDTO { Preflight = new PreflightCheckDTO(result.Preflight), Query = new QuerySaveResultDTO(result.Result) })); } catch (InvalidOperationException ie) { log.LogError("Unrecoverable validation error in query. Error:{Error}", ie.Message); return(BadRequest()); } catch (FormatException fe) { log.LogError("Malformed query identifier. Id:{Id} UniversalId:{UniversalId} Error:{Error}", id, querySave.UniversalId, fe.Message); return(BadRequest()); } catch (OperationCanceledException) { log.LogInformation("Request cancelled."); return(NoContent()); } catch (LeafRPCException lde) { return(StatusCode(lde.StatusCode)); } catch (Exception e) { log.LogError("Could not save query. QueryId:{QueryId} Query:{@Query} Error:{Error}", id, querySave, e.ToString()); return(StatusCode(StatusCodes.Status500InternalServerError)); } }
public UserInquiry ToInquiry() { return(new UserInquiry { AssociatedQueryId = QueryUrn.From(AssociatedQueryId), EmailAddress = EmailAddress, Type = Type, Text = Text }); }
public IEnumerator <object[]> GetEnumerator() { yield return(new object[] { new QueryRef(QueryUrn.From("urn:leaf:query:d7359679-df0d-4604-a2d9-1d3d04417dc2:123456")), new QueryRef(QueryUrn.From("urn:leaf:query:d7359679-df0d-4604-a2d9-1d3d04417dc2:123456")), true }); yield return(new object[] { new QueryRef { Id = Guid.NewGuid(), UniversalId = QueryUrn.From("urn:leaf:query:d7359679-df0d-4604-a2d9-1d3d04417dc2:123456") }, new QueryRef { Id = Guid.NewGuid(), UniversalId = QueryUrn.From("urn:leaf:query:d7359679-df0d-4604-a2d9-1d3d04417dc2:123456") }, true }); yield return(new object[] { new QueryRef { Id = Guid.NewGuid(), UniversalId = QueryUrn.From("urn:leaf:query:d7359679-df0d-4604-a2d9-1d3d04417dc2:123456") }, new QueryRef { Id = Guid.NewGuid(), UniversalId = QueryUrn.From("urn:leaf:query:d7359678-df0d-4604-a2d9-1d3d04417dc2:123456") }, false }); var id = Guid.NewGuid(); yield return(new object[] { new QueryRef { Id = id }, new QueryRef { Id = id }, true }); yield return(new object[] { new QueryRef { Id = Guid.NewGuid() }, new QueryRef { Id = Guid.NewGuid() }, false }); }
public async Task <Query> GetQueryAsync(QueryUrn urn) { log.LogInformation("Getting query UId:{UId}", urn); try { return(await service.GetQueryAsync(urn)); } catch (DbException de) { log.LogError("Could not get query. UniversalId:{UniversalId} Code:{Code} Error:{Error}", urn, de.ErrorCode, de.Message); de.MapThrow(); throw; } }
public async Task <QueryDeleteResult> DeleteAsync(QueryUrn urn, bool force) { log.LogInformation("Deleting query. Query:{Query} Force:{Force}", urn, force); try { return(await service.DeleteAsync(urn, force)); } catch (DbException de) { log.LogError("Could not delete query. Query:{Query} Code:{Code} Error:{Error}", urn, de.ErrorCode, de.Message); de.MapThrow(); throw; } }
public QueryRef(string identifier) { if (Guid.TryParse(identifier, out var guid)) { Id = guid; } else if (QueryUrn.TryParse(identifier, out var urn)) { UniversalId = urn; } else { throw new FormatException($"Query identifier {identifier} is not a valid Guid or Urn"); } }
async Task <QuerySaveResult> UpsertSave(QuerySave query) { var conceptids = query.Resources.Concepts.Select(c => c.Id.Value); var queryids = query.Resources.Queries.Select(q => q.Id.Value); try { using (var cn = new SqlConnection(dbOpts.ConnectionString)) { await cn.OpenAsync(); var qsr = await cn.QueryFirstOrDefaultAsync <QuerySaveResultRecord>( upsertQuerySave, new { queryid = query.QueryId, urn = query.UniversalId.ToString(), ver = query.Ver, name = query.Name, category = query.Category, conceptids = ResourceIdTable.From(conceptids), queryids = ResourceIdTable.From(queryids), definition = query.Definition, user = user.UUID }, commandType : CommandType.StoredProcedure, commandTimeout : dbOpts.DefaultTimeout ); if (qsr == null) { return(null); } return(new QuerySaveResult(query.QueryId, QueryUrn.From(qsr.UniversalId), qsr.Ver)); } } catch (SqlException se) { logger.LogError("Could not save query. Query:{@Query} Code:{Code} Error:{Error}", query, se.ErrorCode, se.Message); se.MapThrow(); throw; } }
public async Task <QueryDeleteResult> DeleteAsync(QueryUrn uid, bool force) { using (var cn = new SqlConnection(dbOpts.ConnectionString)) { await cn.OpenAsync(); var dependents = await cn.QueryAsync <QueryDependentRecord>( deleteQuery, new { uid = uid.ToString(), force, user = user.UUID, admin = user.IsAdmin }, commandType : CommandType.StoredProcedure, commandTimeout : dbOpts.DefaultTimeout ); return(QueryDeleteResult.From(dependents.Select(d => { return new QueryDependent(d.Id, QueryUrn.From(d.UniversalId), d.Name, d.Owner); }))); } }
public async Task <ActionResult <QueryDTO> > Get(string ident) { try { var urn = QueryUrn.From(ident); var query = await queryService.GetQuery(urn); if (query == null) { return(NotFound()); } return(Ok(new QueryDTO(query))); } catch (LeafDbException le) { return(StatusCode(le.StatusCode)); } catch (Exception e) { log.LogError("Could not get query. Identifier:{Identifier} Error:{Error}", ident, e.ToString()); return(StatusCode(StatusCodes.Status500InternalServerError)); } }
public async Task <Query> GetQuery(QueryUrn uid) { logger.LogInformation("Getting query UId:{UId}", uid); using (var cn = new SqlConnection(dbOpts.ConnectionString)) { await cn.OpenAsync(); try { var r = await cn.QueryFirstOrDefaultAsync <QueryRecord>( queryQueryByUId, new { uid = uid.ToString(), user = user.UUID, groups = GroupMembership.From(user) }, commandType : CommandType.StoredProcedure, commandTimeout : dbOpts.DefaultTimeout ); return(new Query { Id = r.Id, UniversalId = QueryUrn.From(r.UniversalId), Name = r.Name, Category = r.Category, Owner = r.Owner, Created = r.Created, Updated = r.Updated, Count = r.Count, Definition = r.Definition }); } catch (SqlException se) { logger.LogError("Could not get query. UniversalId:{UniversalId} Code:{Code} Error:{Error}", uid, se.ErrorCode, se.Message); se.MapThrow(); throw; } } }
public async Task <QueryDeleteResult> DeleteAsync(QueryUrn urn, bool force) { log.LogInformation("Deleting query. Query:{Query} Force:{Force}", urn, force); try { var result = await service.DeleteAsync(urn, force); if (result.Ok) { log.LogInformation("Deleted query. Query:{Query}", urn); } else { log.LogInformation("Could not delete query due to conflict. Query:{Query} Result:{@Result}", urn, result); } return(result); } catch (DbException de) { log.LogError("Failed to delete query. Query:{Query} Code:{Code} Error:{Error}", urn, de.ErrorCode, de.Message); de.MapThrow(); throw; } }
public IEnumerator <object[]> GetEnumerator() { yield return(new object[] { new QueryPreflightCheckResult { QueryRef = new QueryRef(QueryUrn.From("urn:leaf:query:d7359679-df0d-4604-a2d9-1d3d04417dc2:123456")), IsPresent = true, IsAuthorized = true, ConceptCheck = new ConceptPreflightCheck { Results = new ConceptPreflightCheckResult[] { new ConceptPreflightCheckResult { Id = Guid.NewGuid(), UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.42"), IsPresent = true, IsAuthorized = true }, new ConceptPreflightCheckResult { Id = Guid.NewGuid(), UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.45"), IsPresent = true, IsAuthorized = true } } } }, true }); yield return(new object[] { new QueryPreflightCheckResult { QueryRef = new QueryRef(QueryUrn.From("urn:leaf:query:d7359679-df0d-4604-a2d9-1d3d04417dc2:123456")), IsPresent = false, IsAuthorized = false, ConceptCheck = new ConceptPreflightCheck { Results = new ConceptPreflightCheckResult[] { new ConceptPreflightCheckResult { Id = Guid.NewGuid(), UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.42"), IsPresent = true, IsAuthorized = true }, new ConceptPreflightCheckResult { Id = Guid.NewGuid(), UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.45"), IsPresent = true, IsAuthorized = true } } } }, false }); yield return(new object[] { new QueryPreflightCheckResult { QueryRef = new QueryRef(QueryUrn.From("urn:leaf:query:d7359679-df0d-4604-a2d9-1d3d04417dc2:123456")), IsPresent = true, IsAuthorized = true, ConceptCheck = new ConceptPreflightCheck { Results = new ConceptPreflightCheckResult[] { new ConceptPreflightCheckResult { Id = Guid.NewGuid(), UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.42"), IsPresent = false, IsAuthorized = false }, new ConceptPreflightCheckResult { Id = Guid.NewGuid(), UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.45"), IsPresent = true, IsAuthorized = true } } } }, false }); }
public async Task <ActionResult <QuerySaveResponseDTO> > Save( string id, [FromBody] QuerySaveDTO querySave, [FromServices] IPanelConverterService panelConverter, [FromServices] IPanelValidator panelValidator, CancellationToken cancelToken ) { try { // federated user submitting an initial save request if (!user.IsInstutional && QueryUrn.From(querySave.UniversalId) == null) { return(BadRequest("Initial save requests must be made to home node.")); } var ctx = await panelConverter.GetPanelsAsync(querySave, cancelToken); if (!ctx.PreflightPassed) { return(BadRequest(new QuerySaveResponseDTO { Preflight = new PreflightCheckDTO(ctx.PreflightCheck) })); } var query = panelValidator.Validate(ctx); cancelToken.ThrowIfCancellationRequested(); if (!user.IsInstutional) { panelConverter.LocalizeDefinition(querySave, query); } var toSave = new QuerySave { QueryId = new Guid(id), UniversalId = ctx.UniversalId, Name = querySave.Name, Category = querySave.Category, Definition = QueryDefinitionDTO.JSON(querySave), Resources = query.Panels.GetResources() }; if (querySave.Ver.HasValue) { toSave.Ver = querySave.Ver.Value; } var saved = await queryService.Save(toSave); if (saved == null) { return(NotFound()); } var response = new QuerySaveResponseDTO { Preflight = new PreflightCheckDTO(ctx.PreflightCheck), Query = new QuerySaveResultDTO(saved) }; return(Ok(response)); } catch (InvalidOperationException ie) { log.LogError("Unrecoverable validation error in query. Error:{Error}", ie.Message); return(BadRequest()); } catch (FormatException fe) { log.LogError("Malformed query identifier. Id:{Id} UniversalId:{UniversalId} Error:{Error}", id, querySave.UniversalId, fe.Message); return(BadRequest()); } catch (OperationCanceledException) { log.LogInformation("Request cancelled."); return(NoContent()); } catch (LeafDbException lde) { return(StatusCode(lde.StatusCode)); } catch (Exception e) { log.LogError("Could not save query. QueryId:{QueryId} Query:{@Query} Error:{Error}", id, querySave, e.ToString()); return(StatusCode(StatusCodes.Status500InternalServerError)); } }
public IEnumerator <object[]> GetEnumerator() { var first = new QueryRef { UniversalId = QueryUrn.From("urn:leaf:query:d7359679-df0d-4604-a2d9-1d3d04417dc2:123456") }; var second = new QueryRef { UniversalId = QueryUrn.From("urn:leaf:query:d7359668-df0d-4604-a2d9-1d3d04417dc2:563423") }; yield return(new object[] { new PreflightResources(new QueryRef[] { }) { DirectConceptsCheck = new PreflightConcepts { PreflightCheck = new ConceptPreflightCheck { Results = new ConceptPreflightCheckResult[] { new ConceptPreflightCheckResult { Id = Guid.NewGuid(), UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.42"), IsPresent = true, IsAuthorized = true }, new ConceptPreflightCheckResult { Id = Guid.NewGuid(), UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.45"), IsPresent = true, IsAuthorized = true } } } }, DirectQueriesCheck = new PreflightQueries { Results = new QueryPreflightCheckResult[] { new QueryPreflightCheckResult { QueryRef = first, IsPresent = true, IsAuthorized = true, ConceptCheck = new ConceptPreflightCheck { Results = new ConceptPreflightCheckResult[] { new ConceptPreflightCheckResult { Id = Guid.NewGuid(), UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.42"), IsPresent = true, IsAuthorized = true }, new ConceptPreflightCheckResult { Id = Guid.NewGuid(), UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.45"), IsPresent = true, IsAuthorized = true } } } }, new QueryPreflightCheckResult { QueryRef = second, IsPresent = true, IsAuthorized = true, ConceptCheck = new ConceptPreflightCheck { Results = new ConceptPreflightCheckResult[] { new ConceptPreflightCheckResult { Id = Guid.NewGuid(), UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.41"), IsPresent = true, IsAuthorized = true }, new ConceptPreflightCheckResult { Id = Guid.NewGuid(), UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.50"), IsPresent = true, IsAuthorized = true } } } } } } }, true }); yield return(new object[] { new PreflightResources(new QueryRef[] { }) { DirectConceptsCheck = new PreflightConcepts { PreflightCheck = new ConceptPreflightCheck { Results = new ConceptPreflightCheckResult[] { new ConceptPreflightCheckResult { Id = Guid.NewGuid(), UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.42"), IsPresent = false, IsAuthorized = false }, new ConceptPreflightCheckResult { Id = Guid.NewGuid(), UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.45"), IsPresent = true, IsAuthorized = true } } } }, DirectQueriesCheck = new PreflightQueries { Results = new QueryPreflightCheckResult[] { new QueryPreflightCheckResult { QueryRef = first, IsPresent = true, IsAuthorized = true, ConceptCheck = new ConceptPreflightCheck { Results = new ConceptPreflightCheckResult[] { new ConceptPreflightCheckResult { Id = Guid.NewGuid(), UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.42"), IsPresent = true, IsAuthorized = true }, new ConceptPreflightCheckResult { Id = Guid.NewGuid(), UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.45"), IsPresent = true, IsAuthorized = true } } } }, new QueryPreflightCheckResult { QueryRef = second, IsPresent = true, IsAuthorized = true, ConceptCheck = new ConceptPreflightCheck { Results = new ConceptPreflightCheckResult[] { new ConceptPreflightCheckResult { Id = Guid.NewGuid(), UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.41"), IsPresent = true, IsAuthorized = true }, new ConceptPreflightCheckResult { Id = Guid.NewGuid(), UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.50"), IsPresent = true, IsAuthorized = true } } } } } } }, false }); yield return(new object[] { new PreflightResources(new QueryRef[] { }) { DirectConceptsCheck = new PreflightConcepts { PreflightCheck = new ConceptPreflightCheck { Results = new ConceptPreflightCheckResult[] { new ConceptPreflightCheckResult { Id = Guid.NewGuid(), UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.42"), IsPresent = true, IsAuthorized = true }, new ConceptPreflightCheckResult { Id = Guid.NewGuid(), UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.45"), IsPresent = true, IsAuthorized = true } } } }, DirectQueriesCheck = new PreflightQueries { Results = new QueryPreflightCheckResult[] { new QueryPreflightCheckResult { QueryRef = first, IsPresent = false, IsAuthorized = false, ConceptCheck = new ConceptPreflightCheck { Results = new ConceptPreflightCheckResult[] { new ConceptPreflightCheckResult { Id = Guid.NewGuid(), UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.42"), IsPresent = true, IsAuthorized = true }, new ConceptPreflightCheckResult { Id = Guid.NewGuid(), UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.45"), IsPresent = true, IsAuthorized = true } } } }, new QueryPreflightCheckResult { QueryRef = second, IsPresent = true, IsAuthorized = true, ConceptCheck = new ConceptPreflightCheck { Results = new ConceptPreflightCheckResult[] { new ConceptPreflightCheckResult { Id = Guid.NewGuid(), UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.41"), IsPresent = true, IsAuthorized = true }, new ConceptPreflightCheckResult { Id = Guid.NewGuid(), UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.50"), IsPresent = true, IsAuthorized = true } } } } } } }, false }); yield return(new object[] { new PreflightResources(new QueryRef[] { }) { DirectConceptsCheck = new PreflightConcepts { PreflightCheck = new ConceptPreflightCheck { Results = new ConceptPreflightCheckResult[] { new ConceptPreflightCheckResult { Id = Guid.NewGuid(), UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.42"), IsPresent = true, IsAuthorized = true }, new ConceptPreflightCheckResult { Id = Guid.NewGuid(), UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.45"), IsPresent = true, IsAuthorized = true } } } }, DirectQueriesCheck = new PreflightQueries { Results = new QueryPreflightCheckResult[] { new QueryPreflightCheckResult { QueryRef = first, IsPresent = true, IsAuthorized = true, ConceptCheck = new ConceptPreflightCheck { Results = new ConceptPreflightCheckResult[] { new ConceptPreflightCheckResult { Id = Guid.NewGuid(), UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.42"), IsPresent = true, IsAuthorized = true }, new ConceptPreflightCheckResult { Id = Guid.NewGuid(), UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.45"), IsPresent = true, IsAuthorized = true } } } }, new QueryPreflightCheckResult { QueryRef = second, IsPresent = true, IsAuthorized = true, ConceptCheck = new ConceptPreflightCheck { Results = new ConceptPreflightCheckResult[] { new ConceptPreflightCheckResult { Id = Guid.NewGuid(), UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.41"), IsPresent = true, IsAuthorized = true }, new ConceptPreflightCheckResult { Id = Guid.NewGuid(), UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.50"), IsPresent = false, IsAuthorized = false } } } } } } }, false }); }
public void Errors_Queries_Should_Have_Data_If_Not_Ok() { var first = new QueryRef { UniversalId = QueryUrn.From("urn:leaf:query:d7359679-df0d-4604-a2d9-1d3d04417dc2:123456") }; var second = new QueryRef { UniversalId = QueryUrn.From("urn:leaf:query:d7359668-df0d-4604-a2d9-1d3d04417dc2:563423") }; var pr = new PreflightResources(new QueryRef[] { }) { DirectConceptsCheck = new PreflightConcepts { PreflightCheck = new ConceptPreflightCheck { Results = new ConceptPreflightCheckResult[] { new ConceptPreflightCheckResult { Id = Guid.NewGuid(), UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.42"), IsPresent = true, IsAuthorized = true }, new ConceptPreflightCheckResult { Id = Guid.NewGuid(), UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.45"), IsPresent = true, IsAuthorized = true } } } }, DirectQueriesCheck = new PreflightQueries { Results = new QueryPreflightCheckResult[] { new QueryPreflightCheckResult { QueryRef = first, IsPresent = false, IsAuthorized = false, ConceptCheck = new ConceptPreflightCheck { Results = new ConceptPreflightCheckResult[] { new ConceptPreflightCheckResult { Id = Guid.NewGuid(), UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.42"), IsPresent = true, IsAuthorized = true }, new ConceptPreflightCheckResult { Id = Guid.NewGuid(), UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.45"), IsPresent = true, IsAuthorized = true } } } }, new QueryPreflightCheckResult { QueryRef = second, IsPresent = true, IsAuthorized = true, ConceptCheck = new ConceptPreflightCheck { Results = new ConceptPreflightCheckResult[] { new ConceptPreflightCheckResult { Id = Guid.NewGuid(), UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.41"), IsPresent = true, IsAuthorized = true }, new ConceptPreflightCheckResult { Id = Guid.NewGuid(), UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.50"), IsPresent = true, IsAuthorized = true } } } } } } }; var errors = pr.Errors(); Assert.False(errors.ConceptErrors.Any()); Assert.True(errors.QueryErrors.Any()); }
public void Concepts_Should_Match_Count_If_Ok() { var first = new QueryRef { Id = Guid.NewGuid(), UniversalId = QueryUrn.From("urn:leaf:query:d7359679-df0d-4604-a2d9-1d3d04417dc2:123456") }; var second = new QueryRef { Id = Guid.NewGuid(), UniversalId = QueryUrn.From("urn:leaf:query:d7359668-df0d-4604-a2d9-1d3d04417dc2:563423") }; var errorUid = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.42"); var c12342 = Guid.NewGuid(); var c12345 = Guid.NewGuid(); var c12341 = Guid.NewGuid(); var c12344 = Guid.NewGuid(); var c12340 = Guid.NewGuid(); var c12350 = Guid.NewGuid(); var pr = new PreflightResources(new QueryRef[] { first, second }) { DirectConceptsCheck = new PreflightConcepts { PreflightCheck = new ConceptPreflightCheck { Results = new ConceptPreflightCheckResult[] { new ConceptPreflightCheckResult { Id = c12342, UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.42"), IsPresent = true, IsAuthorized = true }, new ConceptPreflightCheckResult { Id = c12345, UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.45"), IsPresent = true, IsAuthorized = true } } }, Concepts = new Concept[] { new Concept { Id = c12342, UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.42"), }, new Concept { Id = c12345, UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.45"), } } }, DirectQueriesCheck = new PreflightQueries { Results = new QueryPreflightCheckResult[] { new QueryPreflightCheckResult { QueryRef = first, IsPresent = true, IsAuthorized = true, ConceptCheck = new ConceptPreflightCheck { Results = new ConceptPreflightCheckResult[] { new ConceptPreflightCheckResult { Id = c12341, UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.41"), IsPresent = true, IsAuthorized = true }, new ConceptPreflightCheckResult { Id = c12344, UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.44"), IsPresent = true, IsAuthorized = true } } } }, new QueryPreflightCheckResult { QueryRef = second, IsPresent = true, IsAuthorized = true, ConceptCheck = new ConceptPreflightCheck { Results = new ConceptPreflightCheckResult[] { new ConceptPreflightCheckResult { Id = c12340, UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.40"), IsPresent = true, IsAuthorized = true }, new ConceptPreflightCheckResult { Id = c12350, UniversalId = ConceptUrn.From("urn:leaf:concept:diag:codeset=ICD9+code=123.50"), IsPresent = true, IsAuthorized = true } } } } } } }; var concepts = pr.Concepts(new Model.Options.CompilerOptions { Alias = "@", FieldPersonId = "person_id" }); Assert.True(concepts.Count() == 4); Assert.Contains(concepts, c => c.Id == c12342); Assert.Contains(concepts, c => c.Id == c12345); Assert.Contains(concepts, c => c.Id == first.Id.Value); Assert.Contains(concepts, c => c.Id == second.Id.Value); }
public void QueryUrn_From_NonQueryUrn_Should_Fail() { var urn = "urn:leaf:concept:diag:codeset=ICD9+code=123.42"; Assert.Throws <FormatException>(() => QueryUrn.From(urn)); }