Nothing
# Offline fixture tests: parse a bundled CSV and assert exact values.
# These run without any network access and cover the full parsing stack
# (csv_parse.R -> aemo_coerce_types -> aemo_apply_filters).
# A failure here means a silent correctness bug in the parser or type coercion.
fixture_path <- function(name) {
system.file("testdata", name, package = "aemo")
}
test_that("fixture CSV parses with correct structure", {
path <- fixture_path("PUBLIC_DISPATCHIS_202401150000_FIXTURE.CSV")
skip_if_not(nzchar(path) && file.exists(path),
"fixture file not installed")
tables <- aemo:::aemo_parse_csv(path)
expect_type(tables, "list")
expect_true(length(tables) >= 1L)
# The DISPATCHPRICE table should be present
nm <- names(tables)
expect_true(any(grepl("price", nm, ignore.case = TRUE)),
info = paste("Expected a 'price' table; got:", paste(nm, collapse = ", ")))
})
test_that("fixture DISPATCHPRICE has correct columns after coercion", {
path <- fixture_path("PUBLIC_DISPATCHIS_202401150000_FIXTURE.CSV")
skip_if_not(nzchar(path) && file.exists(path),
"fixture file not installed")
tables <- aemo:::aemo_parse_csv(path)
price_nm <- names(tables)[grepl("price", names(tables), ignore.case = TRUE)][1L]
df <- aemo:::aemo_coerce_types(tables[[price_nm]])
# 9 data rows across 5 regions / 2 intervals (TAS has no 00:10 row in fixture)
expect_equal(nrow(df), 9L)
# settlementdate must be POSIXct in AEST
expect_s3_class(df$settlementdate, "POSIXct")
expect_equal(attr(df$settlementdate, "tzone"), "Australia/Brisbane")
# rrp must be numeric (not character)
expect_true(is.numeric(df$rrp),
info = "rrp column must be numeric after type coercion")
# Known pinned values: NSW1 at 00:05 = 62.35 AUD/MWh
nsw_0005 <- df[df$regionid == "NSW1" &
format(df$settlementdate, "%H:%M") == "00:05", ]
expect_equal(nrow(nsw_0005), 1L)
expect_equal(nsw_0005$rrp, 62.35)
# SA1 at 00:05 = 63.45 AUD/MWh
sa_0005 <- df[df$regionid == "SA1" &
format(df$settlementdate, "%H:%M") == "00:05", ]
expect_equal(nrow(sa_0005), 1L)
expect_equal(sa_0005$rrp, 63.45)
})
test_that("intervention filter correctly removes INTERVENTION=1 rows", {
path <- fixture_path("PUBLIC_DISPATCHIS_202401150000_FIXTURE.CSV")
skip_if_not(nzchar(path) && file.exists(path),
"fixture file not installed")
tables <- aemo:::aemo_parse_csv(path)
price_nm <- names(tables)[grepl("price", names(tables), ignore.case = TRUE)][1L]
df <- aemo:::aemo_coerce_types(tables[[price_nm]])
# Fixture has only INTERVENTION=0 rows; filter should return all rows
df_filtered <- aemo:::aemo_apply_filters(df, intervention = FALSE)
expect_equal(nrow(df_filtered), nrow(df))
# Passing intervention=TRUE should also return all rows (no =1 rows present)
df_both <- aemo:::aemo_apply_filters(df, intervention = TRUE)
expect_equal(nrow(df_both), nrow(df))
})
test_that("region filter works on fixture data", {
path <- fixture_path("PUBLIC_DISPATCHIS_202401150000_FIXTURE.CSV")
skip_if_not(nzchar(path) && file.exists(path),
"fixture file not installed")
tables <- aemo:::aemo_parse_csv(path)
price_nm <- names(tables)[grepl("price", names(tables), ignore.case = TRUE)][1L]
df <- aemo:::aemo_coerce_types(tables[[price_nm]])
df_nsw <- aemo:::aemo_apply_filters(df, region = "NSW1")
expect_true(all(df_nsw$regionid == "NSW1"))
expect_equal(nrow(df_nsw), 2L) # NSW1 appears in both 00:05 and 00:10
})
test_that("aemo_parse_time is AEST and DST-safe on fixture timestamps", {
# 2024-01-15 is mid-summer in Australia: Sydney is AEDT (UTC+11).
# Market time must remain AEST (UTC+10). Verify by checking the UTC offset.
t <- aemo:::aemo_parse_time("2024-01-15 00:05:00")
# UTC offset for Australia/Brisbane is always +10:00
offset_hrs <- as.numeric(format(t, "%z")) / 100
expect_equal(offset_hrs, 10)
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.