tests/testthat/test-io-repertoires-schema.R

test_that("read_repertoires() errors when both barcode_col and count_col are set", {
  sample_file <- system.file("extdata/tsv", "sample_0_1k.tsv", package = "immundata")

  expect_error(
    read_repertoires(
      path = sample_file,
      schema = c("cdr3_aa", "v_call"),
      barcode_col = "barcode",
      count_col = "count_col" # Not actually in the file, but we want the code path tested
    ),
    "either .*barcode_col.*count_col"
  )
})

test_that("read_repertoires() fails if missing columns in the receptor schema", {
  output_dir <- create_test_output_dir()
  on.exit(cleanup_output_dir(output_dir))

  sample_file <- system.file("extdata/tsv", "sample_0_1k.tsv", package = "immundata")

  bad_schema <- c("cdr3_aa", "v_call", "some_missing_col")

  expect_error(
    read_repertoires(
      path = sample_file,
      schema = bad_schema,
      output_folder = output_dir
    ),
    "Missing receptor feature column\\(s\\)"
  )
})

test_that("read_repertoires() fails with a clear message when barcode column is missing", {
  output_dir <- create_test_output_dir()
  on.exit(cleanup_output_dir(output_dir))

  sample_file <- system.file("extdata/tsv", "sample_0_1k.tsv", package = "immundata")

  expect_error(
    read_repertoires(
      path = sample_file,
      schema = make_receptor_schema(
        features = c("v_call", "j_call", "junction_aa"),
        chains = "IGH"
      ),
      barcode_col = "missing_barcode_col",
      locus_col = "locus",
      umi_col = "counts",
      output_folder = output_dir
    ),
    "Missing column\\(s\\) referenced by arguments: \\[missing_barcode_col\\]"
  )
})

test_that("read_repertoires() fails with a clear message when metadata file column is missing", {
  output_dir <- create_test_output_dir()
  on.exit(cleanup_output_dir(output_dir))

  metadata <- data.frame(
    WrongFileCol = "some/path.tsv",
    stringsAsFactors = FALSE
  )

  expect_error(
    read_repertoires(
      path = "<metadata>",
      metadata = metadata,
      metadata_file_col = "File",
      schema = c("cdr3_aa", "v_call"),
      output_folder = output_dir
    ),
    "has no column"
  )
})

test_that("read_repertoires() fails when single-cell mode is requested without umi_col", {
  output_dir <- create_test_output_dir()
  on.exit(cleanup_output_dir(output_dir))

  sample_file <- system.file("extdata/tsv", "sample_0_1k.tsv", package = "immundata")

  expect_error(
    read_repertoires(
      path = sample_file,
      schema = c("cdr3_aa", "v_call"),
      barcode_col = "sequence_id",
      output_folder = output_dir
    ),
    "Single-cell mode requires .*umi_col"
  )
})

test_that("read_repertoires() fails when chained schema is passed without locus_col", {
  output_dir <- create_test_output_dir()
  on.exit(cleanup_output_dir(output_dir))

  sample_file <- system.file("extdata/tsv", "sample_0_1k.tsv", package = "immundata")

  expect_error(
    read_repertoires(
      path = sample_file,
      schema = make_receptor_schema(
        features = c("cdr3_aa", "v_call"),
        chains = "IGH"
      ),
      output_folder = output_dir
    ),
    "locus_col.*NULL"
  )
})

test_that("read_repertoires() fails when paired schema is passed without barcode_col", {
  output_dir <- create_test_output_dir()
  on.exit(cleanup_output_dir(output_dir))

  sample_file <- system.file("extdata/tsv", "sample_0_1k.tsv", package = "immundata")

  expect_error(
    read_repertoires(
      path = sample_file,
      schema = make_receptor_schema(
        features = c("cdr3_aa", "v_call"),
        chains = c("IGH", "IGL")
      ),
      locus_col = "locus",
      output_folder = output_dir
    ),
    "barcode_col.*NULL"
  )
})

test_that("read_repertoires() fails with a clear message when count_col is missing", {
  output_dir <- create_test_output_dir()
  on.exit(cleanup_output_dir(output_dir))

  sample_file <- system.file("extdata/tsv", "sample_0_1k.tsv", package = "immundata")

  expect_error(
    read_repertoires(
      path = sample_file,
      schema = c("cdr3_aa", "v_call"),
      count_col = "missing_count_col",
      output_folder = output_dir
    ),
    "Missing column\\(s\\) referenced by arguments: \\[missing_count_col\\]"
  )
})

test_that("read_repertoires() fails with a clear message when locus_col is missing", {
  output_dir <- create_test_output_dir()
  on.exit(cleanup_output_dir(output_dir))

  sample_file <- system.file("extdata/tsv", "sample_0_1k.tsv", package = "immundata")

  expect_error(
    read_repertoires(
      path = sample_file,
      schema = make_receptor_schema(
        features = c("cdr3_aa", "v_call"),
        chains = "IGH"
      ),
      barcode_col = "sequence_id",
      locus_col = "missing_locus_col",
      umi_col = "counts",
      output_folder = output_dir
    ),
    "Missing column\\(s\\) referenced by arguments: \\[missing_locus_col\\]"
  )
})

test_that("read_repertoires() fails with a clear message when umi_col is missing", {
  output_dir <- create_test_output_dir()
  on.exit(cleanup_output_dir(output_dir))

  sample_file <- system.file("extdata/tsv", "sample_0_1k.tsv", package = "immundata")

  expect_error(
    read_repertoires(
      path = sample_file,
      schema = make_receptor_schema(
        features = c("cdr3_aa", "v_call"),
        chains = "IGH"
      ),
      barcode_col = "sequence_id",
      locus_col = "locus",
      umi_col = "missing_umi_col",
      output_folder = output_dir
    ),
    "Missing column\\(s\\) referenced by arguments: \\[missing_umi_col\\]"
  )
})

test_that("read_repertoires() fails when metadata paths are empty or NA", {
  output_dir <- create_test_output_dir()
  on.exit(cleanup_output_dir(output_dir))

  metadata <- data.frame(
    File = c("", NA),
    stringsAsFactors = FALSE
  )

  expect_error(
    read_repertoires(
      path = "<metadata>",
      metadata = metadata,
      schema = c("cdr3_aa", "v_call"),
      output_folder = output_dir
    ),
    "contains empty/NA paths"
  )
})

Try the immundata package in your browser

Any scripts or data that you put into this service are public.

immundata documentation built on April 4, 2026, 9:09 a.m.