191 lines
5.9 KiB
Go
191 lines
5.9 KiB
Go
package createPersonGeneticAnalysis_test
|
|
|
|
import "seekia/internal/genetics/createPersonGeneticAnalysis"
|
|
|
|
import "seekia/internal/genetics/readGeneticAnalysis"
|
|
|
|
import "seekia/resources/geneticReferences/locusMetadata"
|
|
import "seekia/resources/geneticReferences/monogenicDiseases"
|
|
import "seekia/resources/geneticReferences/polygenicDiseases"
|
|
import "seekia/resources/geneticReferences/traits"
|
|
import "seekia/resources/trainedPredictionModels"
|
|
|
|
import "seekia/internal/genetics/createRawGenomes"
|
|
import "seekia/internal/genetics/prepareRawGenomes"
|
|
import "seekia/internal/helpers"
|
|
|
|
import "testing"
|
|
import "errors"
|
|
|
|
|
|
func TestCreatePersonGeneticAnalysis_SingleGenome(t *testing.T){
|
|
|
|
err := locusMetadata.InitializeLocusMetadataVariables()
|
|
if (err != nil) {
|
|
t.Fatalf("InitializeLocusMetadataVariables failed: " + err.Error())
|
|
}
|
|
|
|
monogenicDiseases.InitializeMonogenicDiseaseVariables()
|
|
|
|
err = polygenicDiseases.InitializePolygenicDiseaseVariables()
|
|
if (err != nil) {
|
|
t.Fatalf("InitializePolygenicDiseaseVariables failed: " + err.Error())
|
|
}
|
|
|
|
err = traits.InitializeTraitVariables()
|
|
if (err != nil) {
|
|
t.Fatalf("InitializeTraitVariables failed: " + err.Error())
|
|
}
|
|
|
|
err = trainedPredictionModels.InitializeTrainedPredictionModels()
|
|
if (err != nil) {
|
|
t.Fatalf("InitializeTrainedPredictionModels failed: " + err.Error())
|
|
}
|
|
|
|
genomeIdentifier, err := helpers.GetNewRandom16ByteArray()
|
|
if (err != nil) {
|
|
t.Fatalf("Failed to get random 16 byte array: " + err.Error())
|
|
}
|
|
|
|
fakeRawGenome, _, _, _, err := createRawGenomes.CreateFakeRawGenome_AncestryDNA()
|
|
if (err != nil) {
|
|
t.Fatalf("Failed to create fake raw AncestryDNA genome: " + err.Error())
|
|
}
|
|
|
|
genomeIsValid, rawGenomeWithMetadata, err := prepareRawGenomes.CreateRawGenomeWithMetadataObject(genomeIdentifier, fakeRawGenome)
|
|
if (err != nil){
|
|
t.Fatalf("CreateRawGenomeWithMetadataObject failed: " + err.Error())
|
|
}
|
|
if (genomeIsValid == false){
|
|
t.Fatalf("CreateRawGenomeWithMetadataObject failed: Genome is not valid.")
|
|
}
|
|
|
|
genomesList := []prepareRawGenomes.RawGenomeWithMetadata{rawGenomeWithMetadata}
|
|
|
|
updateProgressFunction := func(_ int)error{
|
|
return nil
|
|
}
|
|
|
|
checkIfProcessIsStoppedFunction := func()bool{
|
|
return false
|
|
}
|
|
|
|
processCompleted, personGeneticAnalysis, err := createPersonGeneticAnalysis.CreatePersonGeneticAnalysis(genomesList, updateProgressFunction, checkIfProcessIsStoppedFunction)
|
|
if (err != nil){
|
|
t.Fatalf("Failed to create person genetic analysis: " + err.Error())
|
|
}
|
|
if (processCompleted == false){
|
|
t.Fatalf("Failed to create person genetic analysis: Process did not complete.")
|
|
}
|
|
|
|
personGeneticAnalysisObject, err := readGeneticAnalysis.ReadPersonGeneticAnalysisString(personGeneticAnalysis)
|
|
if (err != nil){
|
|
t.Fatalf("Failed to read person genetic analysis string: " + err.Error())
|
|
}
|
|
|
|
err = readGeneticAnalysis.VerifyPersonGeneticAnalysis(personGeneticAnalysisObject)
|
|
if (err != nil){
|
|
t.Fatalf("Failed to read person genetic analysis: " + err.Error())
|
|
}
|
|
}
|
|
|
|
|
|
func TestCreatePersonGeneticAnalysis_MultipleGenomes(t *testing.T){
|
|
|
|
err := locusMetadata.InitializeLocusMetadataVariables()
|
|
if (err != nil) {
|
|
t.Fatalf("InitializeLocusMetadataVariables failed: " + err.Error())
|
|
}
|
|
|
|
monogenicDiseases.InitializeMonogenicDiseaseVariables()
|
|
|
|
err = polygenicDiseases.InitializePolygenicDiseaseVariables()
|
|
if (err != nil) {
|
|
t.Fatalf("InitializePolygenicDiseaseVariables failed: " + err.Error())
|
|
}
|
|
|
|
err = traits.InitializeTraitVariables()
|
|
if (err != nil) {
|
|
t.Fatalf("InitializeTraitVariables failed: " + err.Error())
|
|
}
|
|
|
|
err = trainedPredictionModels.InitializeTrainedPredictionModels()
|
|
if (err != nil) {
|
|
t.Fatalf("InitializeTrainedPredictionModels failed: " + err.Error())
|
|
}
|
|
|
|
numberOfGenomesToAdd := helpers.GetRandomIntWithinRange(2, 5)
|
|
|
|
genomesList := make([]prepareRawGenomes.RawGenomeWithMetadata, 0, numberOfGenomesToAdd)
|
|
|
|
for i:=0; i < numberOfGenomesToAdd; i++{
|
|
|
|
genomeIdentifier, err := helpers.GetNewRandom16ByteArray()
|
|
if (err != nil) {
|
|
t.Fatalf("Failed to get random 16 byte array: " + err.Error())
|
|
}
|
|
|
|
getFakeRawGenome := func()(string, error){
|
|
|
|
is23andMe := helpers.GetRandomBool()
|
|
if (is23andMe == true){
|
|
fakeRawGenome, _, _, _, err := createRawGenomes.CreateFakeRawGenome_23andMe()
|
|
if (err != nil) {
|
|
return "", errors.New("Failed to create fake raw 23andMe genome: " + err.Error())
|
|
}
|
|
|
|
return fakeRawGenome, nil
|
|
}
|
|
|
|
fakeRawGenome, _, _, _, err := createRawGenomes.CreateFakeRawGenome_AncestryDNA()
|
|
if (err != nil) {
|
|
return "", errors.New("Failed to create fake raw AncestryDNA genome: " + err.Error())
|
|
}
|
|
|
|
return fakeRawGenome, nil
|
|
}
|
|
|
|
fakeRawGenome, err := getFakeRawGenome()
|
|
if (err != nil){
|
|
t.Fatalf("Failed to get fake raw genome: " + err.Error())
|
|
}
|
|
|
|
genomeIsValid, rawGenomeWithMetadata, err := prepareRawGenomes.CreateRawGenomeWithMetadataObject(genomeIdentifier, fakeRawGenome)
|
|
if (err != nil){
|
|
t.Fatalf("CreateRawGenomeWithMetadataObject failed: " + err.Error())
|
|
}
|
|
if (genomeIsValid == false){
|
|
t.Fatalf("CreateRawGenomeWithMetadataObject failed: Genome is not valid.")
|
|
}
|
|
|
|
genomesList = append(genomesList, rawGenomeWithMetadata)
|
|
}
|
|
|
|
updateProgressFunction := func(_ int)error{
|
|
return nil
|
|
}
|
|
|
|
checkIfProcessIsStoppedFunction := func()bool{
|
|
return false
|
|
}
|
|
|
|
processCompleted, personGeneticAnalysis, err := createPersonGeneticAnalysis.CreatePersonGeneticAnalysis(genomesList, updateProgressFunction, checkIfProcessIsStoppedFunction)
|
|
if (err != nil){
|
|
t.Fatalf("Failed to create person genetic analysis: " + err.Error())
|
|
}
|
|
if (processCompleted == false){
|
|
t.Fatalf("Failed to create person genetic analysis: Process did not complete.")
|
|
}
|
|
|
|
personGeneticAnalysisObject, err := readGeneticAnalysis.ReadPersonGeneticAnalysisString(personGeneticAnalysis)
|
|
if (err != nil){
|
|
t.Fatalf("Failed to read person genetic analysis string: " + err.Error())
|
|
}
|
|
|
|
err = readGeneticAnalysis.VerifyPersonGeneticAnalysis(personGeneticAnalysisObject)
|
|
if (err != nil){
|
|
t.Fatalf("Failed to read person genetic analysis: " + err.Error())
|
|
}
|
|
}
|
|
|
|
|