hunk.code_window: 	config, err := rest.InClusterConfig()
   	if err != nil {
   		return err
   	}
   	if !useAdminToken {
  
hunk.labels: keep keep replace keep keep keep
hunk.after_edit: 		errChan <- err
   		return
  
hunk.file_path: api/kubernetes/cli/exec.go
hunk.type: replace
file: package kubernetes
  
  import (
  	"testing"
  
  	"github.com/stretchr/testify/assert"
  )
  
  func Test_AddAppLabels(t *testing.T) {
  	tests := []struct {
  		name       string
  		input      string
  		wantOutput string
  	}{
  		{
  			name: "single deployment without labels",
  			input: `apiVersion: apps/v1
  kind: Deployment
  metadata:
    name: busybox
  spec:
    replicas: 3
    selector:
      matchLabels:
        app: busybox
    template:
      metadata:
        labels:
          app: busybox
      spec:
        containers:
          - image: busybox
            name: busybox
  `,
  			wantOutput: `apiVersion: apps/v1
  kind: Deployment
  metadata:
    labels:
      io.portainer.kubernetes.application.kind: git
      io.portainer.kubernetes.application.name: best-name
      io.portainer.kubernetes.application.owner: best-owner
      io.portainer.kubernetes.application.stackid: "123"
    name: busybox
  spec:
    replicas: 3
    selector:
      matchLabels:
        app: busybox
    template:
      metadata:
        labels:
          app: busybox
      spec:
        containers:
          - image: busybox
            name: busybox
  `,
  		},
  		{
  			name: "single deployment with existing labels",
  			input: `apiVersion: apps/v1
  kind: Deployment
  metadata:
    labels:
      foo: bar
    name: busybox
  spec:
    replicas: 3
    selector:
      matchLabels:
        app: busybox
    template:
      metadata:
        labels:
          app: busybox
      spec:
        containers:
          - image: busybox
            name: busybox
  `,
  			wantOutput: `apiVersion: apps/v1
  kind: Deployment
  metadata:
    labels:
      foo: bar
      io.portainer.kubernetes.application.kind: git
      io.portainer.kubernetes.application.name: best-name
      io.portainer.kubernetes.application.owner: best-owner
      io.portainer.kubernetes.application.stackid: "123"
    name: busybox
  spec:
    replicas: 3
    selector:
      matchLabels:
        app: busybox
    template:
      metadata:
        labels:
          app: busybox
      spec:
        containers:
          - image: busybox
            name: busybox
  `,
  		},
  		{
  			name: "complex kompose output",
  			input: `apiVersion: v1
  items:
    - apiVersion: v1
      kind: Service
      metadata:
        creationTimestamp: null
        labels:
          io.kompose.service: web
        name: web
      spec:
        ports:
          - name: "5000"
            port: 5000
            targetPort: 5000
        selector:
          io.kompose.service: web
      status:
        loadBalancer: {}
    - apiVersion: apps/v1
      kind: Deployment
      metadata:
        creationTimestamp: null
        labels:
          io.kompose.service: redis
        name: redis
      spec:
        replicas: 1
        selector:
          matchLabels:
            io.kompose.service: redis
        strategy: {}
        template:
          metadata:
            creationTimestamp: null
            labels:
              io.kompose.service: redis
      status: {}
    - apiVersion: apps/v1
      kind: Deployment
      metadata:
        creationTimestamp: null
        name: web
      spec:
        replicas: 1
        selector:
          matchLabels:
            io.kompose.service: web
        strategy:
          type: Recreate
        template:
          metadata:
            creationTimestamp: null
            labels:
              io.kompose.service: web
      status: {}
  kind: List
  metadata: {}
  `,
  			wantOutput: `apiVersion: v1
  items:
    - apiVersion: v1
      kind: Service
      metadata:
        creationTimestamp: null
        labels:
          io.kompose.service: web
          io.portainer.kubernetes.application.kind: git
          io.portainer.kubernetes.application.name: best-name
          io.portainer.kubernetes.application.owner: best-owner
          io.portainer.kubernetes.application.stackid: "123"
        name: web
      spec:
        ports:
          - name: "5000"
            port: 5000
            targetPort: 5000
        selector:
          io.kompose.service: web
      status:
        loadBalancer: {}
    - apiVersion: apps/v1
      kind: Deployment
      metadata:
        creationTimestamp: null
        labels:
          io.kompose.service: redis
          io.portainer.kubernetes.application.kind: git
          io.portainer.kubernetes.application.name: best-name
          io.portainer.kubernetes.application.owner: best-owner
          io.portainer.kubernetes.application.stackid: "123"
        name: redis
      spec:
        replicas: 1
        selector:
          matchLabels:
            io.kompose.service: redis
        strategy: {}
        template:
          metadata:
            creationTimestamp: null
            labels:
              io.kompose.service: redis
      status: {}
    - apiVersion: apps/v1
      kind: Deployment
      metadata:
        creationTimestamp: null
        labels:
          io.portainer.kubernetes.application.kind: git
          io.portainer.kubernetes.application.name: best-name
          io.portainer.kubernetes.application.owner: best-owner
          io.portainer.kubernetes.application.stackid: "123"
        name: web
      spec:
        replicas: 1
        selector:
          matchLabels:
            io.kompose.service: web
        strategy:
          type: Recreate
        template:
          metadata:
            creationTimestamp: null
            labels:
              io.kompose.service: web
      status: {}
  kind: List
  metadata: {}
  `,
  		},
  		{
  			name: "multiple items separated by ---",
  			input: `apiVersion: apps/v1
  kind: Deployment
  metadata:
    name: busybox
  spec:
    replicas: 3
    selector:
      matchLabels:
        app: busybox
    template:
      metadata:
        labels:
          app: busybox
      spec:
        containers:
          - image: busybox
            name: busybox
  ---
  apiVersion: v1
  kind: Service
  metadata:
    creationTimestamp: null
    labels:
      io.kompose.service: web
    name: web
  spec:
    ports:
      - name: "5000"
        port: 5000
        targetPort: 5000
    selector:
      io.kompose.service: web
  ---
  apiVersion: apps/v1
  kind: Deployment
  metadata:
    labels:
      foo: bar
    name: busybox
  spec:
    replicas: 3
    selector:
      matchLabels:
        app: busybox
    template:
      metadata:
        labels:
          app: busybox
      spec:
        containers:
          - image: busybox
            name: busybox
  `,
  			wantOutput: `apiVersion: apps/v1
  kind: Deployment
  metadata:
    labels:
      io.portainer.kubernetes.application.kind: git
      io.portainer.kubernetes.application.name: best-name
      io.portainer.kubernetes.application.owner: best-owner
      io.portainer.kubernetes.application.stackid: "123"
    name: busybox
  spec:
    replicas: 3
    selector:
      matchLabels:
        app: busybox
    template:
      metadata:
        labels:
          app: busybox
      spec:
        containers:
          - image: busybox
            name: busybox
  ---
  apiVersion: v1
  kind: Service
  metadata:
    creationTimestamp: null
    labels:
      io.kompose.service: web
      io.portainer.kubernetes.application.kind: git
      io.portainer.kubernetes.application.name: best-name
      io.portainer.kubernetes.application.owner: best-owner
      io.portainer.kubernetes.application.stackid: "123"
    name: web
  spec:
    ports:
      - name: "5000"
        port: 5000
        targetPort: 5000
    selector:
      io.kompose.service: web
  ---
  apiVersion: apps/v1
  kind: Deployment
  metadata:
    labels:
      foo: bar
      io.portainer.kubernetes.application.kind: git
      io.portainer.kubernetes.application.name: best-name
      io.portainer.kubernetes.application.owner: best-owner
      io.portainer.kubernetes.application.stackid: "123"
    name: busybox
  spec:
    replicas: 3
    selector:
      matchLabels:
        app: busybox
    template:
      metadata:
        labels:
          app: busybox
      spec:
        containers:
          - image: busybox
            name: busybox
  `,
  		},
  		{
  			name:       "empty",
  			input:      "",
  			wantOutput: "",
  		},
  		{
  			name: "no only deployments",
  			input: `apiVersion: v1
  kind: Service
  metadata:
    creationTimestamp: null
    labels:
      io.kompose.service: web
    name: web
  spec:
    ports:
      - name: "5000"
        port: 5000
        targetPort: 5000
    selector:
      io.kompose.service: web
  `,
  			wantOutput: `apiVersion: v1
  kind: Service
  metadata:
    creationTimestamp: null
    labels:
      io.kompose.service: web
      io.portainer.kubernetes.application.kind: git
      io.portainer.kubernetes.application.name: best-name
      io.portainer.kubernetes.application.owner: best-owner
      io.portainer.kubernetes.application.stackid: "123"
    name: web
  spec:
    ports:
      - name: "5000"
        port: 5000
        targetPort: 5000
    selector:
      io.kompose.service: web
  `,
  		},
  	}
  
  	labels := KubeAppLabels{
  		StackID: 123,
  		Name:    "best-name",
  		Owner:   "best-owner",
  		Kind:    "git",
  	}
  
  	for _, tt := range tests {
  		t.Run(tt.name, func(t *testing.T) {
  			result, err := AddAppLabels([]byte(tt.input), labels)
  			assert.NoError(t, err)
  			assert.Equal(t, tt.wantOutput, string(result))
  		})
  	}
  }
  
  func Test_AddAppLabels_PickingName_WhenLabelNameIsEmpty(t *testing.T) {
  	labels := KubeAppLabels{
  		StackID: 123,
  		Owner:   "best-owner",
  		Kind:    "git",
  	}
  
  	input := `apiVersion: v1
  kind: Service
  metadata:
    name: web
  spec:
    ports:
      - name: "5000"
        port: 5000
        targetPort: 5000
  `
  
  	expected := `apiVersion: v1
  kind: Service
  metadata:
    labels:
      io.portainer.kubernetes.application.kind: git
      io.portainer.kubernetes.application.name: web
      io.portainer.kubernetes.application.owner: best-owner
      io.portainer.kubernetes.application.stackid: "123"
    name: web
  spec:
    ports:
      - name: "5000"
        port: 5000
        targetPort: 5000
  `
  
  	result, err := AddAppLabels([]byte(input), labels)
  	assert.NoError(t, err)
  	assert.Equal(t, expected, string(result))
  }
  
  func Test_AddAppLabels_PickingName_WhenLabelAndMetadataNameAreEmpty(t *testing.T) {
  	labels := KubeAppLabels{
  		StackID: 123,
  		Owner:   "best-owner",
  		Kind:    "git",
  	}
  
  	input := `apiVersion: v1
  kind: Service
  spec:
    ports:
      - name: "5000"
        port: 5000
        targetPort: 5000
  `
  
  	expected := `apiVersion: v1
  kind: Service
  metadata:
    labels:
      io.portainer.kubernetes.application.kind: git
      io.portainer.kubernetes.application.name: ""
      io.portainer.kubernetes.application.owner: best-owner
      io.portainer.kubernetes.application.stackid: "123"
  spec:
    ports:
      - name: "5000"
        port: 5000
        targetPort: 5000
  `
  
  	result, err := AddAppLabels([]byte(input), labels)
  	assert.NoError(t, err)
  	assert.Equal(t, expected, string(result))
  }
  