# Getting node IDs in traversal paths

test_that("getting lists of node IDs using `get_paths()` is possible", {

  # Create a simple graph
  graph <-
    create_graph() %>%
    add_n_nodes(n = 8) %>%
    add_edge(from = 1, to = 2) %>%
    add_edge(from = 1, to = 3) %>%
    add_edge(from = 3, to = 4) %>%
    add_edge(from = 3, to = 5) %>%
    add_edge(from = 4, to = 6) %>%
    add_edge(from = 2, to = 7) %>%
    add_edge(from = 7, to = 5) %>%
    add_edge(from = 4, to = 8)

  # Get a list of all paths outward from node `1`
  paths_from_1 <-
    get_paths(
      graph = graph,
      from = 1)

  # Expect a list of 4 components
  expect_length(
    paths_from_1, 4)

  # Expect specific node IDs in each list
  expect_true(
    all(paths_from_1[[1]] == c(1, 3, 5)))

  expect_true(
    all(paths_from_1[[2]] == c(1, 2, 7, 5)))

  expect_true(
    all(paths_from_1[[3]] == c(1, 3, 4, 6)))

  expect_true(
    all(paths_from_1[[4]] == c(1, 3, 4, 8)))

  # Get a list of all paths leading to node `6`
  paths_to_6 <-
    get_paths(
      graph = graph,
      to = 6)

  # Expect a list of 1 component
  expect_length(
    paths_to_6, 1)

  # Expect specific node IDs in the list
  expect_true(
    all(paths_to_6[[1]] == c(1, 3, 4, 6)))

  #' # Get a list of all paths from `1` to `5`
  paths_from_1_to_5 <-
    get_paths(
      graph = graph,
      from = 1,
      to = 5)

  # Expect a list of 2 components
  expect_length(
    paths_from_1_to_5, 2)

  # Expect specific node IDs in each list
  expect_true(
    all(paths_from_1_to_5[[1]] == c(1, 3, 5)))

  expect_true(
    all(paths_from_1_to_5[[2]] == c(1, 2, 7, 5)))

  # Get a list of all paths from `1` up to a distance
  # of 2 node traversals
  paths_from_1_dist_2 <-
    get_paths(
      graph = graph,
      from = 1,
      distance = 2)

  # Expect a list of 3 components
  expect_length(
    paths_from_1_dist_2, 3)

  # Expect specific node IDs in each list
  expect_true(
    all(paths_from_1_dist_2[[1]] == c(1, 3, 5)))

  expect_true(
    all(paths_from_1_dist_2[[2]] == c(1, 2, 7)))

  expect_true(
    all(paths_from_1_dist_2[[3]] == c(1, 3, 4)))

  # Get a list of the shortest paths from `1` to `5`
  paths_from_1_to_5_shortest <-
    get_paths(
      graph = graph,
      from = 1,
      to = 5,
      shortest_path = TRUE)

  # Expect a list of 1 component
  expect_length(
    paths_from_1_to_5_shortest, 1)

  # Expect specific node IDs for the one list
  expect_true(
    all(paths_from_1_to_5_shortest[[1]] == c(1, 3, 5)))

  # Get a list of the longest paths from `1` to `5`
  paths_from_1_to_5_longest <-
    get_paths(
      graph = graph,
      from = 1,
      to = 5,
      longest_path = TRUE)

  # Expect a list of 1 component
  expect_length(
    paths_from_1_to_5_longest, 1)

  # Expect specific node IDs for the one list
  expect_true(
    all(paths_from_1_to_5_longest[[1]] == c(1, 2, 7, 5)))
})
