mirror of
https://github.com/OneUptime/oneuptime.git
synced 2026-04-06 00:32:12 +02:00
feat: add Terraform tests for server-provided defaults in incident, alert, scheduled maintenance, and on-call policy configurations
This commit is contained in:
@@ -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"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
Reference in New Issue
Block a user