tests/testthat/test_blast.R

path_db <- system.file("extdata",
  "100_sp_UNITE_sh_general_release_dynamic.fasta",
  package = "MiscMetabar", mustWork = TRUE
)

suppressWarnings(blast_error_or_not <-
  try(system("blastn 2>&1", intern = TRUE), silent = TRUE))

if (class(blast_error_or_not) == "try-error") {
  message(
    "blast_to_phyloseq(), filter_asv_blast(), blast_to_derep(),
          add_blast_info, and blast_pq() can't be tested when
          vsearch is not installed"
  )
} else {
  test_that(
    "blast_to_phyloseq works fine",
    {
      expect_s3_class(
        blast_on_df <-
          blast_to_phyloseq(data_fungi_mini, path_db),
        "data.frame"
      )
      expect_s3_class(
        blast_to_phyloseq(data_fungi_mini, path_db, list_no_output_query = TRUE),
        "data.frame"
      )
      expect_s3_class(
        blast_to_phyloseq(
          data_fungi_mini,
          path_db,
          unique_per_seq = TRUE,
          score_filter = FALSE
        ),
        "data.frame"
      )
      expect_error(blast_to_phyloseq(data_fungi_mini, "inst/extdata/nil.fasta"))
    }
  )

  test_that(
    "blast_pq works fine",
    {
      expect_s3_class(blast_df <-
        blast_pq(data_fungi_mini, path_db), "data.frame")
      expect_equal(ncol(blast_df), 9)
      expect_true(nrow(blast_df) > 0)
      expect_s3_class(
        blast_df <- blast_pq(data_fungi_mini, path_db,
          unique_per_seq = TRUE
        ),
        "data.frame"
      )
      expect_s3_class(
        blast_df <- blast_pq(data_fungi_mini, path_db,
          score_filter = FALSE
        ),
        "data.frame"
      )
      expect_s3_class(
        blast_df <-
          blast_pq(
            data_fungi_mini,
            path_db,
            unique_per_seq = FALSE,
            score_filter = FALSE
          ),
        "data.frame"
      )
      expect_s3_class(
        blast_df <-
          blast_pq(data_fungi_mini, database = "inst/extdata/dbase"),
        "data.frame"
      )
      expect_error(
        blast_df <-
          blast_pq(data_fungi_mini, fasta_for_db = path_db, database = "inst/extdata/dbase")
      )
      expect_error(blast_df <- blast_pq(data_fungi_mini))
    }
  )

  test_that(
    "filter_asv_blast works fine",
    {
      expect_s4_class(
        df_blast <-
          filter_asv_blast(data_fungi_mini, path_db),
        "phyloseq"
      )
      expect_s4_class(
        df_blast <-
          filter_asv_blast(
            data_fungi_mini,
            path_db,
            id_filter = 50,
            e_value_filter = 10,
            bit_score_filter = 20,
            min_cover_filter = 20
          ),
        "phyloseq"
      )
      expect_s4_class(
        df_blast <-
          filter_asv_blast(
            data_fungi_mini,
            path_db,
            add_info_to_taxtable = FALSE,
            nproc = 2
          ),
        "phyloseq"
      )
      expect_error(filter_asv_blast(data_fungi_mini, "inst/extdata/nil.fasta"))
    }
  )

  test_that(
    "add_blast_info works fine",
    {
      expect_s4_class(
        df_blast <-
          add_blast_info(data_fungi_mini, path_db),
        "phyloseq"
      )
      expect_error(add_blast_info(data_fungi_mini, "inst/extdata/nil.fasta"))
    }
  )

  derep_data <-
    derepFastq(unlist(list_fastq_files("inst/extdata/")))
  test_that(
    "blast_to_derep works fine",
    {
      expect_s3_class(
        derep_blast <-
          blast_to_derep(derep_data, path_db),
        "data.frame"
      )
      expect_s3_class(
        derep_blast <-
          blast_to_derep(derep_data, path_db, score_filter = TRUE),
        "data.frame"
      )
      expect_s3_class(
        derep_blast2 <-
          blast_to_derep(derep_data, "inst/extdata/ex_little.fasta"),
        "data.frame"
      )
      expect_s3_class(
        derep_blast2 <-
          blast_to_derep(
            derep_data,
            "inst/extdata/ex_little.fasta",
            unique_per_seq = TRUE,
            score_filter = FALSE
          ),
        "data.frame"
      )
      expect_s3_class(
        derep_blast2 <-
          blast_to_derep(
            derep_data,
            "inst/extdata/ex_little.fasta",
            list_no_output_query = TRUE
          ),
        "data.frame"
      )
      expect_error(blast_to_derep(derep_data, "inst/extdata/nil.fasta"))
    }
  )
}

file.remove(list.files("tests/testthat", pattern = "dbase"))
adrientaudiere/MiscMetabar documentation built on July 6, 2024, 7:02 p.m.