package terraform

import (
	"github.com/stretchr/testify/assert"
	"testing"
)

func TestReadOutputs(t *testing.T) {
	terraformOutputsJson := `{
  "boolean": {
    "sensitive": false,
    "type": "bool",
    "value": true
  },
  "list_any": {
    "sensitive": false,
    "type": [
      "tuple",
      [
        "bool",
        "string",
        "number",
        [
          "tuple",
          []
        ]
      ]
    ],
    "value": [
      true,
      "2",
      3,
      []
    ]
  },
  "list_numbers": {
    "sensitive": false,
    "type": [
      "tuple",
      [
        "number",
        "number",
        "number"
      ]
    ],
    "value": [
      1,
      2,
      3
    ]
  },
  "list_string": {
    "sensitive": false,
    "type": [
      "tuple",
      [
        "string",
        "string",
        "string"
      ]
    ],
    "value": [
      "1",
      "2",
      "3"
    ]
  },
  "map": {
    "sensitive": false,
    "type": [
      "object",
      {
        "ATTR1": "string",
        "ATTR2": [
          "object",
          {
            "ATTR3": [
              "tuple",
              []
            ]
          }
        ]
      }
    ],
    "value": {
      "ATTR1": "",
      "ATTR2": {
        "ATTR3": []
      }
    }
  },
  "secret": {
    "sensitive": true,
    "type": "string",
    "value": "this-could-be-a-password"
  },
  "string": {
    "sensitive": false,
    "type": "string",
    "value": "string"
  },
  "number": {
    "sensitive": false,
    "type": "number",
    "value": 1
  }
}
`
	outputs, err := ReadOutputs(terraformOutputsJson)
	assert.NoError(t, err)

	assert.Equal(t, 8, len(outputs))

	assert.Equal(t, true, outputs["boolean"])
	assert.Equal(t, "string", outputs["string"])
	assert.Equal(t, float64(1), outputs["number"])
}
