package createGeneticAnalysis_test import "seekia/internal/genetics/createGeneticAnalysis" 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/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() polygenicDiseases.InitializePolygenicDiseaseVariables() traits.InitializeTraitVariables() genomeIdentifier, err := helpers.GetNewRandomHexString(16) if (err != nil) { t.Fatalf("Failed to get random hex string: " + 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 := createGeneticAnalysis.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.") } personGeneticAnalysisMapList, err := readGeneticAnalysis.ReadGeneticAnalysisString(personGeneticAnalysis) if (err != nil){ t.Fatalf("Failed to read person genetic analysis string: " + err.Error()) } err = readGeneticAnalysis.ReadPersonGeneticAnalysisForTests(personGeneticAnalysisMapList) 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() polygenicDiseases.InitializePolygenicDiseaseVariables() traits.InitializeTraitVariables() numberOfGenomesToAdd := helpers.GetRandomIntWithinRange(2, 5) genomesList := make([]prepareRawGenomes.RawGenomeWithMetadata, 0, numberOfGenomesToAdd) for i:=0; i < numberOfGenomesToAdd; i++{ genomeIdentifier, err := helpers.GetNewRandomHexString(16) if (err != nil) { t.Fatalf("Failed to get random hex string: " + 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 := createGeneticAnalysis.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.") } personGeneticAnalysisMapList, err := readGeneticAnalysis.ReadGeneticAnalysisString(personGeneticAnalysis) if (err != nil){ t.Fatalf("Failed to read person genetic analysis string: " + err.Error()) } err = readGeneticAnalysis.ReadPersonGeneticAnalysisForTests(personGeneticAnalysisMapList) if (err != nil){ t.Fatalf("Failed to read person genetic analysis: " + err.Error()) } } func TestCreateCoupleGeneticAnalysis_SingleGenomes(t *testing.T){ err := locusMetadata.InitializeLocusMetadataVariables() if (err != nil) { t.Fatalf("InitializeLocusMetadataVariables failed: " + err.Error()) } monogenicDiseases.InitializeMonogenicDiseaseVariables() polygenicDiseases.InitializePolygenicDiseaseVariables() traits.InitializeTraitVariables() getPersonGenomesList := func()([]prepareRawGenomes.RawGenomeWithMetadata, error){ genomeIdentifier, err := helpers.GetNewRandomHexString(16) if (err != nil) { return nil, errors.New("Failed to get random hex string: " + err.Error()) } fakeRawGenome, _, _, _, err := createRawGenomes.CreateFakeRawGenome_AncestryDNA() if (err != nil) { return nil, errors.New("Failed to create fake raw AncestryDNA genome: " + err.Error()) } genomeIsValid, rawGenomeWithMetadata, err := prepareRawGenomes.CreateRawGenomeWithMetadataObject(genomeIdentifier, fakeRawGenome) if (err != nil){ return nil, errors.New("CreateRawGenomeWithMetadataObject failed: " + err.Error()) } if (genomeIsValid == false){ return nil, errors.New("CreateRawGenomeWithMetadataObject failed: Genome is not valid.") } personGenomesList := []prepareRawGenomes.RawGenomeWithMetadata{rawGenomeWithMetadata} return personGenomesList, nil } personAGenomesList, err := getPersonGenomesList() if (err != nil){ t.Fatalf("getPersonGenomesList failed: " + err.Error()) } personBGenomesList, err := getPersonGenomesList() if (err != nil){ t.Fatalf("getPersonGenomesList failed: " + err.Error()) } updateProgressFunction := func(_ int)error{ return nil } checkIfProcessIsStoppedFunction := func()bool{ return false } processCompleted, coupleGeneticAnalysis, err := createGeneticAnalysis.CreateCoupleGeneticAnalysis(personAGenomesList, personBGenomesList, updateProgressFunction, checkIfProcessIsStoppedFunction) if (err != nil){ t.Fatalf("Failed to create couple genetic analysis: " + err.Error()) } if (processCompleted == false){ t.Fatalf("Failed to create couple genetic analysis: Process did not complete.") } coupleGeneticAnalysisMapList, err := readGeneticAnalysis.ReadGeneticAnalysisString(coupleGeneticAnalysis) if (err != nil){ t.Fatalf("Failed to read couple genetic analysis string: " + err.Error()) } err = readGeneticAnalysis.ReadCoupleGeneticAnalysisForTests(coupleGeneticAnalysisMapList) if (err != nil){ t.Fatalf("Failed to read couple genetic analysis: " + err.Error()) } } func TestCreateCoupleGeneticAnalysis_SingleAndMultipleGenomes(t *testing.T){ err := locusMetadata.InitializeLocusMetadataVariables() if (err != nil) { t.Fatalf("InitializeLocusMetadataVariables failed: " + err.Error()) } monogenicDiseases.InitializeMonogenicDiseaseVariables() polygenicDiseases.InitializePolygenicDiseaseVariables() traits.InitializeTraitVariables() getPersonGenomesList := func(addSecondGenome bool)([]prepareRawGenomes.RawGenomeWithMetadata, error){ genomeIdentifier1, err := helpers.GetNewRandomHexString(16) if (err != nil) { return nil, errors.New("Failed to get random hex string: " + err.Error()) } fakeRawGenome1, _, _, _, err := createRawGenomes.CreateFakeRawGenome_AncestryDNA() if (err != nil) { return nil, errors.New("Failed to create fake raw AncestryDNA genome: " + err.Error()) } genomeIsValid, rawGenomeWithMetadata1, err := prepareRawGenomes.CreateRawGenomeWithMetadataObject(genomeIdentifier1, fakeRawGenome1) if (err != nil){ return nil, errors.New("CreateRawGenomeWithMetadataObject failed: " + err.Error()) } if (genomeIsValid == false){ return nil, errors.New("CreateRawGenomeWithMetadataObject failed: Genome is not valid.") } genomesList := []prepareRawGenomes.RawGenomeWithMetadata{rawGenomeWithMetadata1} if (addSecondGenome == true){ genomeIdentifier2, err := helpers.GetNewRandomHexString(16) if (err != nil) { return nil, errors.New("Failed to get random hex string: " + err.Error()) } fakeRawGenome2, _, _, _, err := createRawGenomes.CreateFakeRawGenome_23andMe() if (err != nil) { return nil, errors.New("Failed to create fake raw 23andMe genome: " + err.Error()) } genomeIsValid, rawGenomeWithMetadata2, err := prepareRawGenomes.CreateRawGenomeWithMetadataObject(genomeIdentifier2, fakeRawGenome2) if (err != nil){ return nil, errors.New("CreateRawGenomeWithMetadataObject failed: " + err.Error()) } if (genomeIsValid == false){ return nil, errors.New("CreateRawGenomeWithMetadataObject failed: Genome is not valid.") } genomesList = append(genomesList, rawGenomeWithMetadata2) } return genomesList, nil } personAGenomesList, err := getPersonGenomesList(false) if (err != nil){ t.Fatalf("getPersonGenomesList failed: " + err.Error()) } personBGenomesList, err := getPersonGenomesList(true) if (err != nil){ t.Fatalf("getPersonGenomesList failed: " + err.Error()) } updateProgressFunction := func(_ int)error{ return nil } checkIfProcessIsStoppedFunction := func()bool{ return false } processCompleted, coupleGeneticAnalysis, err := createGeneticAnalysis.CreateCoupleGeneticAnalysis(personAGenomesList, personBGenomesList, updateProgressFunction, checkIfProcessIsStoppedFunction) if (err != nil){ t.Fatalf("Failed to create couple genetic analysis: " + err.Error()) } if (processCompleted == false){ t.Fatalf("Failed to create couple genetic analysis: Process did not complete.") } coupleGeneticAnalysisMapList, err := readGeneticAnalysis.ReadGeneticAnalysisString(coupleGeneticAnalysis) if (err != nil){ t.Fatalf("Failed to read couple genetic analysis string: " + err.Error()) } err = readGeneticAnalysis.ReadCoupleGeneticAnalysisForTests(coupleGeneticAnalysisMapList) if (err != nil){ t.Fatalf("Failed to read couple genetic analysis: " + err.Error()) } } func TestCreateCoupleGeneticAnalysis_MultipleGenomes(t *testing.T){ err := locusMetadata.InitializeLocusMetadataVariables() if (err != nil) { t.Fatalf("InitializeLocusMetadataVariables failed: " + err.Error()) } monogenicDiseases.InitializeMonogenicDiseaseVariables() polygenicDiseases.InitializePolygenicDiseaseVariables() traits.InitializeTraitVariables() getPersonGenomesList := func()([]prepareRawGenomes.RawGenomeWithMetadata, error){ genomeIdentifier1, err := helpers.GetNewRandomHexString(16) if (err != nil) { return nil, errors.New("Failed to get random hex string: " + err.Error()) } fakeRawGenome1, _, _, _, err := createRawGenomes.CreateFakeRawGenome_AncestryDNA() if (err != nil) { return nil, errors.New("Failed to create fake raw AncestryDNA genome: " + err.Error()) } genomeIsValid, rawGenomeWithMetadata1, err := prepareRawGenomes.CreateRawGenomeWithMetadataObject(genomeIdentifier1, fakeRawGenome1) if (err != nil){ return nil, errors.New("CreateRawGenomeWithMetadataObject failed: " + err.Error()) } if (genomeIsValid == false){ return nil, errors.New("CreateRawGenomeWithMetadataObject failed: Genome is not valid.") } genomeIdentifier2, err := helpers.GetNewRandomHexString(16) if (err != nil) { return nil, errors.New("Failed to get random hex string: " + err.Error()) } fakeRawGenome2, _, _, _, err := createRawGenomes.CreateFakeRawGenome_23andMe() if (err != nil) { return nil, errors.New("Failed to create fake raw 23andMe genome: " + err.Error()) } genomeIsValid, rawGenomeWithMetadata2, err := prepareRawGenomes.CreateRawGenomeWithMetadataObject(genomeIdentifier2, fakeRawGenome2) if (err != nil){ return nil, errors.New("CreateRawGenomeWithMetadataObject failed: " + err.Error()) } if (genomeIsValid == false){ return nil, errors.New("CreateRawGenomeWithMetadataObject failed: Genome is not valid.") } genomesList := []prepareRawGenomes.RawGenomeWithMetadata{rawGenomeWithMetadata1, rawGenomeWithMetadata2} return genomesList, nil } personAGenomesList, err := getPersonGenomesList() if (err != nil){ t.Fatalf("getPersonGenomesList failed: " + err.Error()) } personBGenomesList, err := getPersonGenomesList() if (err != nil){ t.Fatalf("getPersonGenomesList failed: " + err.Error()) } updateProgressFunction := func(_ int)error{ return nil } checkIfProcessIsStoppedFunction := func()bool{ return false } processCompleted, coupleGeneticAnalysis, err := createGeneticAnalysis.CreateCoupleGeneticAnalysis(personAGenomesList, personBGenomesList, updateProgressFunction, checkIfProcessIsStoppedFunction) if (err != nil){ t.Fatalf("Failed to create couple genetic analysis: " + err.Error()) } if (processCompleted == false){ t.Fatalf("Failed to create couple genetic analysis: Process did not complete.") } coupleGeneticAnalysisMapList, err := readGeneticAnalysis.ReadGeneticAnalysisString(coupleGeneticAnalysis) if (err != nil){ t.Fatalf("Failed to read couple genetic analysis string: " + err.Error()) } err = readGeneticAnalysis.ReadCoupleGeneticAnalysisForTests(coupleGeneticAnalysisMapList) if (err != nil){ t.Fatalf("Failed to read couple genetic analysis: " + err.Error()) } }