// Copyright 2019 The Kubernetes Authors.
// SPDX-License-Identifier: Apache-2.0

package krusty_test

import (
	"testing"

	kusttest_test "sigs.k8s.io/kustomize/api/testutils/kusttest"
)

func makeStatefulSetKustomization(th kusttest_test.Harness) {
	th.WriteK(".", `
commonLabels:
  notIn: arrays
resources:
- statefulset.yaml
- statefulset-with-template.yaml
`)
	th.WriteF("statefulset.yaml", `
kind: StatefulSet
apiVersion: apps/v1
metadata:
  name: test
  labels:
    notIn: arrays
spec:
  serviceName: test
  replicas: 1
  selector:
    matchLabels:
      app: test
  template:
    metadata:
      labels:
        app: test
    spec:
      containers:
      - name: nginx
        image: k8s.gcr.io/nginx-slim:0.8
        ports:
        - containerPort: 80
          name: web
`)
	th.WriteF("statefulset-with-template.yaml", `
kind: StatefulSet
apiVersion: apps/v1
metadata:
  name: persisted-test
  labels:
    notIn: arrays
spec:
  serviceName: test
  replicas: 1
  selector:
    matchLabels:
      app: test
  template:
    metadata:
      labels:
        app: test
    spec:
      containers:
      - name: nginx
        image: k8s.gcr.io/nginx-slim:0.8
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
        - name: data
          mountPath: /usr/share/nginx/data
  volumeClaimTemplates:
  - metadata:
      name: www
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: my-storage-class
      resources:
        requests:
          storage: 1Gi
  - metadata:
      name: data
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: my-storage-class
      resources:
        requests:
          storage: 100Gi
`)
}

func TestTransformersNoCreateArrays(t *testing.T) {
	th := kusttest_test.MakeHarness(t)
	makeStatefulSetKustomization(th)
	m := th.Run(".", th.MakeDefaultOptions())
	th.AssertActualEqualsExpected(m, `
apiVersion: apps/v1
kind: StatefulSet
metadata:
  labels:
    notIn: arrays
  name: test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: test
      notIn: arrays
  serviceName: test
  template:
    metadata:
      labels:
        app: test
        notIn: arrays
    spec:
      containers:
      - image: k8s.gcr.io/nginx-slim:0.8
        name: nginx
        ports:
        - containerPort: 80
          name: web
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  labels:
    notIn: arrays
  name: persisted-test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: test
      notIn: arrays
  serviceName: test
  template:
    metadata:
      labels:
        app: test
        notIn: arrays
    spec:
      containers:
      - image: k8s.gcr.io/nginx-slim:0.8
        name: nginx
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - mountPath: /usr/share/nginx/html
          name: www
        - mountPath: /usr/share/nginx/data
          name: data
  volumeClaimTemplates:
  - metadata:
      labels:
        notIn: arrays
      name: www
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 1Gi
      storageClassName: my-storage-class
  - metadata:
      labels:
        notIn: arrays
      name: data
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 100Gi
      storageClassName: my-storage-class
`)
}
