feat: add Terraform tests for server-provided defaults in incident, alert, scheduled maintenance, and on-call policy configurations

This commit is contained in:
Nawaz Dhandala
2026-01-19 19:40:56 +00:00
parent acb57b6b32
commit 290b59dfc9
8 changed files with 373 additions and 0 deletions

View File

@@ -0,0 +1,89 @@
terraform {
required_providers {
oneuptime = {
source = "oneuptime/oneuptime"
version = "1.0.0"
}
}
}
provider "oneuptime" {
oneuptime_url = var.oneuptime_url
api_key = var.api_key
}
# Test: Incident with Server-Provided Defaults
#
# This test verifies UseStateForUnknown() works for various column types:
# - String fields: current_incident_state_id, description, etc.
# - Bool fields: should_status_page_subscribers_be_notified_on_incident_created
# - List fields: monitors, labels, on_call_duty_policies
#
# The server injects defaults for many fields that aren't specified.
# First create an incident severity (required dependency)
resource "oneuptime_incident_severity" "test" {
project_id = var.project_id
name = "Incident Test Severity"
description = "Severity for incident server defaults test"
color = "#FF0000"
order = 99
}
# Create incident with minimal fields - let server provide defaults
resource "oneuptime_incident" "test_server_defaults" {
project_id = var.project_id
title = "Incident Server Defaults Test"
incident_severity_id = oneuptime_incident_severity.test.id
# IMPORTANT: We intentionally DO NOT specify these Optional+Computed fields:
# - description (string)
# - monitors (list)
# - labels (list)
# - on_call_duty_policies (list)
# - current_incident_state_id (string - server sets to default "created" state)
# - should_status_page_subscribers_be_notified_on_incident_created (bool)
#
# The server will provide default values for these fields.
# With UseStateForUnknown(), Terraform accepts server-provided defaults.
}
# Output to verify creation succeeded
output "incident_id" {
value = oneuptime_incident.test_server_defaults.id
description = "ID of the created incident"
}
# String field - server provides default incident state
output "current_incident_state_id" {
value = oneuptime_incident.test_server_defaults.current_incident_state_id
description = "Server-assigned default incident state (should be 'created' state)"
}
# List field - server may provide empty list or defaults
output "monitors" {
value = oneuptime_incident.test_server_defaults.monitors
description = "Server-provided monitors list"
}
output "labels" {
value = oneuptime_incident.test_server_defaults.labels
description = "Server-provided labels list"
}
# Bool field - server provides default
output "should_notify_subscribers" {
value = oneuptime_incident.test_server_defaults.should_status_page_subscribers_be_notified_on_incident_created
description = "Server-provided default for subscriber notification"
}
# Other server-computed fields
output "slug" {
value = oneuptime_incident.test_server_defaults.slug
description = "Server-generated slug"
}
output "created_at" {
value = oneuptime_incident.test_server_defaults.created_at
description = "Server-generated creation timestamp"
}

View File

@@ -0,0 +1,15 @@
variable "oneuptime_url" {
type = string
description = "OneUptime API URL"
}
variable "api_key" {
type = string
description = "OneUptime API Key"
sensitive = true
}
variable "project_id" {
type = string
description = "OneUptime Project ID"
}

View File

@@ -0,0 +1,75 @@
terraform {
required_providers {
oneuptime = {
source = "oneuptime/oneuptime"
version = "1.0.0"
}
}
}
provider "oneuptime" {
oneuptime_url = var.oneuptime_url
api_key = var.api_key
}
# Test: Alert with Server-Provided Defaults
#
# This test verifies UseStateForUnknown() works for alert resource:
# - String fields: current_alert_state_id, description
# - Bool fields: is_owner_notified_of_alert_creation
# - List fields: labels, on_call_duty_policies
#
# Similar to incident but for the alert resource type.
# First create an alert severity (required dependency)
resource "oneuptime_alert_severity" "test" {
project_id = var.project_id
name = "Alert Test Severity"
description = "Severity for alert server defaults test"
color = "#FFA500"
order = 98
}
# Create alert with minimal fields - let server provide defaults
resource "oneuptime_alert" "test_server_defaults" {
project_id = var.project_id
title = "Alert Server Defaults Test"
alert_severity_id = oneuptime_alert_severity.test.id
# IMPORTANT: We intentionally DO NOT specify these Optional+Computed fields:
# - description (string)
# - labels (list)
# - on_call_duty_policies (list)
# - current_alert_state_id (string - server sets to default state)
#
# The server will provide default values for these fields.
}
# Output to verify creation succeeded
output "alert_id" {
value = oneuptime_alert.test_server_defaults.id
description = "ID of the created alert"
}
# String field - server provides default alert state
output "current_alert_state_id" {
value = oneuptime_alert.test_server_defaults.current_alert_state_id
description = "Server-assigned default alert state"
}
# List fields - server may provide empty list or defaults
output "labels" {
value = oneuptime_alert.test_server_defaults.labels
description = "Server-provided labels list"
}
output "on_call_duty_policies" {
value = oneuptime_alert.test_server_defaults.on_call_duty_policies
description = "Server-provided on-call duty policies list"
}
# Other server-computed fields
output "created_at" {
value = oneuptime_alert.test_server_defaults.created_at
description = "Server-generated creation timestamp"
}

View File

@@ -0,0 +1,15 @@
variable "oneuptime_url" {
type = string
description = "OneUptime API URL"
}
variable "api_key" {
type = string
description = "OneUptime API Key"
sensitive = true
}
variable "project_id" {
type = string
description = "OneUptime Project ID"
}

View File

@@ -0,0 +1,89 @@
terraform {
required_providers {
oneuptime = {
source = "oneuptime/oneuptime"
version = "1.0.0"
}
}
}
provider "oneuptime" {
oneuptime_url = var.oneuptime_url
api_key = var.api_key
}
# Test: Scheduled Maintenance Event with Server-Provided Defaults
#
# This test verifies UseStateForUnknown() works for scheduled maintenance:
# - String fields: description, current_scheduled_maintenance_state_id
# - Bool fields: should_status_page_subscribers_be_notified_on_event_created
# - List fields: monitors, labels, status_pages
#
# Tests datetime fields and various Optional+Computed field types.
# Create scheduled maintenance event with minimal fields
resource "oneuptime_scheduled_maintenance_event" "test_server_defaults" {
project_id = var.project_id
title = "Scheduled Maintenance Server Defaults Test"
# Required datetime fields - use future dates
starts_at = "2030-01-01T00:00:00.000Z"
ends_at = "2030-01-01T02:00:00.000Z"
# IMPORTANT: We intentionally DO NOT specify these Optional+Computed fields:
# - description (string)
# - monitors (list)
# - labels (list)
# - status_pages (list)
# - current_scheduled_maintenance_state_id (string - server sets default)
# - should_status_page_subscribers_be_notified_on_event_created (bool)
# - should_status_page_subscribers_be_notified_when_event_changes_to_ongoing (bool)
# - should_status_page_subscribers_be_notified_when_event_changes_to_ended (bool)
#
# The server will provide default values for these fields.
}
# Output to verify creation succeeded
output "scheduled_maintenance_id" {
value = oneuptime_scheduled_maintenance_event.test_server_defaults.id
description = "ID of the created scheduled maintenance event"
}
# String field - server provides default state
output "current_state_id" {
value = oneuptime_scheduled_maintenance_event.test_server_defaults.current_scheduled_maintenance_state_id
description = "Server-assigned default scheduled maintenance state"
}
# List fields - server may provide empty list or defaults
output "monitors" {
value = oneuptime_scheduled_maintenance_event.test_server_defaults.monitors
description = "Server-provided monitors list"
}
output "labels" {
value = oneuptime_scheduled_maintenance_event.test_server_defaults.labels
description = "Server-provided labels list"
}
output "status_pages" {
value = oneuptime_scheduled_maintenance_event.test_server_defaults.status_pages
description = "Server-provided status pages list"
}
# Bool fields - server provides defaults
output "notify_on_created" {
value = oneuptime_scheduled_maintenance_event.test_server_defaults.should_status_page_subscribers_be_notified_on_event_created
description = "Server-provided default for notification on create"
}
# Other server-computed fields
output "slug" {
value = oneuptime_scheduled_maintenance_event.test_server_defaults.slug
description = "Server-generated slug"
}
output "created_at" {
value = oneuptime_scheduled_maintenance_event.test_server_defaults.created_at
description = "Server-generated creation timestamp"
}

View File

@@ -0,0 +1,15 @@
variable "oneuptime_url" {
type = string
description = "OneUptime API URL"
}
variable "api_key" {
type = string
description = "OneUptime API Key"
sensitive = true
}
variable "project_id" {
type = string
description = "OneUptime Project ID"
}

View File

@@ -0,0 +1,60 @@
terraform {
required_providers {
oneuptime = {
source = "oneuptime/oneuptime"
version = "1.0.0"
}
}
}
provider "oneuptime" {
oneuptime_url = var.oneuptime_url
api_key = var.api_key
}
# Test: On-Call Policy with Server-Provided Defaults
#
# This test verifies UseStateForUnknown() works for on-call policy:
# - String fields: description
# - Bool fields: send_incidnet_created_notification_to_all_on_call_layers
# - List fields: labels
# - Number fields: repeat_policy_if_no_one_acknowledges_no_of_times
#
# Tests various Optional+Computed field types.
# Create on-call policy with minimal fields
resource "oneuptime_on_call_policy" "test_server_defaults" {
project_id = var.project_id
name = "On-Call Policy Server Defaults Test"
# IMPORTANT: We intentionally DO NOT specify these Optional+Computed fields:
# - description (string)
# - labels (list)
# - send_incidnet_created_notification_to_all_on_call_layers (bool) [note: typo in API]
# - repeat_policy_if_no_one_acknowledges_no_of_times (number)
#
# The server will provide default values for these fields.
}
# Output to verify creation succeeded
output "on_call_policy_id" {
value = oneuptime_on_call_policy.test_server_defaults.id
description = "ID of the created on-call policy"
}
# List field - server may provide empty list or defaults
output "labels" {
value = oneuptime_on_call_policy.test_server_defaults.labels
description = "Server-provided labels list"
}
# Other server-computed fields
output "slug" {
value = oneuptime_on_call_policy.test_server_defaults.slug
description = "Server-generated slug"
}
output "created_at" {
value = oneuptime_on_call_policy.test_server_defaults.created_at
description = "Server-generated creation timestamp"
}

View File

@@ -0,0 +1,15 @@
variable "oneuptime_url" {
type = string
description = "OneUptime API URL"
}
variable "api_key" {
type = string
description = "OneUptime API Key"
sensitive = true
}
variable "project_id" {
type = string
description = "OneUptime Project ID"
}