seekia/internal/genetics/createPersonGeneticAnalysis/createPersonGeneticAnalysis_test.go

192 lines
5.9 KiB
Go
Raw Normal View History

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())
}
}