seekia/internal/genetics/createGeneticAnalysis/createGeneticAnalysis_test.go

427 lines
14 KiB
Go

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