diff --git a/charts/mastodon/tests/30_shared_pod_attribtues_test.yaml b/charts/mastodon/tests/30_shared_pod_attribtues_test.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..4f15697533e781d330e6563da044f0f573c37d9c
--- /dev/null
+++ b/charts/mastodon/tests/30_shared_pod_attribtues_test.yaml
@@ -0,0 +1,124 @@
+suite: shared pod attributes
+templates:
+  - configmap-env.yaml
+  - deployment-sidekiq.yaml
+  - deployment-streaming.yaml
+  - deployment-web.yaml
+  - pvc-assets.yaml
+  - pvc-system.yaml
+  - secrets.yaml
+tests:
+  - it: has the correct "envFrom" settings for secret and configmap
+    values:
+      - mocks/dev.yaml
+      - mocks/sidekiq.yaml
+    asserts:
+      - equal:
+          path: spec.template.spec.containers[0].envFrom[0].configMapRef.name
+          value: RELEASE-NAME-mastodon-env
+        template: deployment-sidekiq.yaml
+      - equal:
+          path: spec.template.spec.containers[0].envFrom[1].secretRef.name
+          value: RELEASE-NAME-mastodon
+        template: deployment-sidekiq.yaml
+      - equal:
+          path: spec.template.spec.containers[0].envFrom[0].configMapRef.name
+          value: RELEASE-NAME-mastodon-env
+        template: deployment-streaming.yaml
+      - equal:
+          path: spec.template.spec.containers[0].envFrom[1].secretRef.name
+          value: RELEASE-NAME-mastodon
+        template: deployment-streaming.yaml
+      - equal:
+          path: spec.template.spec.containers[0].envFrom[0].configMapRef.name
+          value: RELEASE-NAME-mastodon-env
+        template: deployment-web.yaml
+      - equal:
+          path: spec.template.spec.containers[0].envFrom[1].secretRef.name
+          value: RELEASE-NAME-mastodon
+        template: deployment-web.yaml
+      - equal:
+          path: metadata.name
+          value: RELEASE-NAME-mastodon-env
+        template: configmap-env.yaml
+      - equal:
+          path: metadata.name
+          value: RELEASE-NAME-mastodon
+        template: secrets.yaml
+  - it: has the correct volumes
+    values:
+      - mocks/dev.yaml
+      - mocks/sidekiq.yaml
+    asserts:
+      - equal:
+          path: spec.template.spec.volumes[0].name
+          value: assets
+        template: deployment-sidekiq.yaml
+      - equal:
+          path: spec.template.spec.volumes[0].persistentVolumeClaim.claimName
+          value: RELEASE-NAME-mastodon-assets
+        template: deployment-sidekiq.yaml
+      - equal:
+          path: spec.template.spec.volumes[1].name
+          value: system
+        template: deployment-sidekiq.yaml
+      - equal:
+          path: spec.template.spec.volumes[1].persistentVolumeClaim.claimName
+          value: RELEASE-NAME-mastodon-system
+        template: deployment-sidekiq.yaml
+      - equal:
+          path: spec.template.spec.containers[0].volumeMounts[0].name
+          value: assets
+        template: deployment-sidekiq.yaml
+      - equal:
+          path: spec.template.spec.containers[0].volumeMounts[0].mountPath
+          value: /opt/mastodon/public/assets
+        template: deployment-sidekiq.yaml
+      - equal:
+          path: spec.template.spec.containers[0].volumeMounts[1].name
+          value: system
+        template: deployment-sidekiq.yaml
+      - equal:
+          path: spec.template.spec.containers[0].volumeMounts[1].mountPath
+          value: /opt/mastodon/public/system
+        template: deployment-sidekiq.yaml
+      - equal:
+          path: spec.template.spec.volumes[0].name
+          value: assets
+        template: deployment-web.yaml
+      - equal:
+          path: spec.template.spec.volumes[0].persistentVolumeClaim.claimName
+          value: RELEASE-NAME-mastodon-assets
+        template: deployment-web.yaml
+      - equal:
+          path: spec.template.spec.volumes[1].name
+          value: system
+        template: deployment-web.yaml
+      - equal:
+          path: spec.template.spec.volumes[1].persistentVolumeClaim.claimName
+          value: RELEASE-NAME-mastodon-system
+        template: deployment-web.yaml
+      - equal:
+          path: spec.template.spec.containers[0].volumeMounts[0].name
+          value: assets
+        template: deployment-web.yaml
+      - equal:
+          path: spec.template.spec.containers[0].volumeMounts[0].mountPath
+          value: /opt/mastodon/public/assets
+        template: deployment-web.yaml
+      - equal:
+          path: spec.template.spec.containers[0].volumeMounts[1].name
+          value: system
+        template: deployment-web.yaml
+      - equal:
+          path: spec.template.spec.containers[0].volumeMounts[1].mountPath
+          value: /opt/mastodon/public/system
+        template: deployment-web.yaml
+      - equal:
+          path: metadata.name
+          value: RELEASE-NAME-mastodon-assets
+        template: pvc-assets.yaml
+      - equal:
+          path: metadata.name
+          value: RELEASE-NAME-mastodon-system
+        template: pvc-system.yaml
\ No newline at end of file
diff --git a/charts/mastodon/tests/50_sidekiq_test.yaml b/charts/mastodon/tests/50_sidekiq_test.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..6bcb3b2623ca41ccf4042a3c97989eac62a5117c
--- /dev/null
+++ b/charts/mastodon/tests/50_sidekiq_test.yaml
@@ -0,0 +1,81 @@
+suite: sidekiq
+templates:
+  - configmap-env.yaml
+  - deployment-sidekiq.yaml
+  - secrets.yaml
+tests:
+  - it: should match basic snapshot
+    values:
+      - mocks/dev.yaml
+    chart:
+      version: 1.2.3
+      appVersion: 4.5.6
+    asserts:
+      - matchSnapshot: {}
+  - it: should create multiple deployments when multiple queues are defined
+    values:
+      - mocks/dev.yaml
+    set:
+      mastodon:
+        sidekiq:
+          workers:
+            - name: scheduler
+              concurrency: 25
+              replicas: 1
+              queues:
+                - scheduler
+            - name: push-pull
+              concurrency: 50
+              replicas: 2
+              queues:
+                - push,6
+                - pull
+                - ingress,4
+            - name: mailers
+              concurrency: 25
+              replicas: 2
+              queues:
+                - mailers
+            - name: default
+              concurrency: 25
+              replicas: 2
+              queues:
+                - default
+    asserts:
+      - hasDocuments:
+          count: 4
+        template: deployment-sidekiq.yaml
+  - it: should use strategy recreate if scheduler is part of queues
+    values:
+      - mocks/dev.yaml
+      - mocks/sidekiq.yaml
+    asserts:
+      - equal:
+          path: spec.strategy.type
+          value: Recreate
+        documentIndex: 0
+        template: deployment-sidekiq.yaml
+      - isNull:
+          path: spec.strategy
+        documentIndex: 1
+        template: deployment-sidekiq.yaml
+  - it: has the correct labels for sidekiq
+    values:
+      - mocks/dev.yaml
+      - mocks/sidekiq.yaml
+    asserts:
+      - equal:
+          path: spec.selector.matchLabels.app\.kubernetes\.io/component
+          value: sidekiq-scheduler
+        documentIndex: 0
+        template: deployment-sidekiq.yaml
+      - equal:
+          path: spec.selector.matchLabels.app\.kubernetes\.io/component
+          value: sidekiq-default
+        documentIndex: 1
+        template: deployment-sidekiq.yaml
+      - equal:
+          path: spec.selector.matchLabels.app\.kubernetes\.io/part-of
+          value: rails
+        template: deployment-sidekiq.yaml
+          
diff --git a/charts/mastodon/tests/50_web_test.yaml b/charts/mastodon/tests/50_web_test.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..9d17ba46dcaf7129b72fd56b2127be2fe9df5e21
--- /dev/null
+++ b/charts/mastodon/tests/50_web_test.yaml
@@ -0,0 +1,58 @@
+suite: web
+templates:
+  - configmap-env.yaml
+  - deployment-web.yaml
+  - ingress.yaml
+  - secrets.yaml
+  - service-web.yaml
+tests:
+  - it: should match basic snapshot
+    values:
+      - mocks/dev.yaml
+    chart:
+      version: 1.2.3
+      appVersion: 4.5.6
+    capabilities:
+      apiVersions:
+        - networking.k8s.io/v1/Ingress
+    asserts:
+      - matchSnapshot: {}
+  - it: should provide mathing ports for Ingress, Service and Pod
+    values:
+      - mocks/dev.yaml
+    capabilities:
+      apiVersions:
+        - networking.k8s.io/v1/Ingress
+    asserts:
+      - equal:
+          path: spec.template.spec.containers[0].ports[0].name
+          value: http
+        template: deployment-web.yaml
+      - equal:
+          path: spec.ports[0].targetPort
+          value: http
+        template: service-web.yaml
+      - equal:
+          path: spec.template.spec.containers[0].ports[0].protocol
+          value: TCP
+        template: deployment-web.yaml
+      - equal:
+          path: spec.ports[0].protocol
+          value: TCP
+        template: service-web.yaml
+      - equal:
+          path: spec.ports[0].port
+          value: 3000
+        template: service-web.yaml
+      - equal:
+          path: spec.rules[0].http.paths[0].backend.service.port.number
+          value: 3000
+        template: ingress.yaml
+      - equal:
+          path: metadata.name
+          value: RELEASE-NAME-mastodon-web
+        template: service-web.yaml
+      - equal:
+          path: spec.rules[0].http.paths[0].backend.service.name
+          value: RELEASE-NAME-mastodon-web
+        template: ingress.yaml
diff --git a/charts/mastodon/tests/98_snapshot_test.yaml b/charts/mastodon/tests/98_snapshot_test.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..87290ef4079a6a7c4835a78e9dc13e35560977dc
--- /dev/null
+++ b/charts/mastodon/tests/98_snapshot_test.yaml
@@ -0,0 +1,32 @@
+suite: Basic Snapshot test
+templates:
+  - configmap-env.yaml
+  - cronjob-media-remove.yaml
+  - deployment-sidekiq.yaml
+  - deployment-streaming.yaml
+  - deployment-web.yaml
+  - ingress.yaml
+  - job-assets-precompile.yaml
+  - job-chewy-upgrade.yaml
+  - job-create-admin.yaml
+  - job-db-migrate.yaml
+  - job-db-pre-migrate.yaml
+  - pvc-assets.yaml
+  - pvc-system.yaml
+  - secrets.yaml
+  - serviceaccount.yaml
+  - service-streaming.yaml
+  - service-web.yaml
+tests:
+  - it: should match basic snapshot
+    values:
+      - mocks/dev.yaml
+    set:
+      mastodon:
+        createAdmin:
+          enabled: true
+    chart:
+      version: 1.2.3
+      appVersion: 4.5.6
+    asserts:
+      - matchSnapshot: {}
diff --git a/charts/mastodon/tests/99_helmlabels_test.yaml b/charts/mastodon/tests/99_helmlabels_test.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..fecc1e2aab2e2fe049f83bb50857dc05b2efabec
--- /dev/null
+++ b/charts/mastodon/tests/99_helmlabels_test.yaml
@@ -0,0 +1,41 @@
+suite: Kubernetes recommendations
+templates:
+  - configmap-env.yaml
+  - cronjob-media-remove.yaml
+  - deployment-sidekiq.yaml
+  - deployment-streaming.yaml
+  - deployment-web.yaml
+  - ingress.yaml
+  - job-assets-precompile.yaml
+  - job-chewy-upgrade.yaml
+  - job-create-admin.yaml
+  - job-db-migrate.yaml
+  - job-db-pre-migrate.yaml
+  - pvc-assets.yaml
+  - pvc-system.yaml
+  - secrets.yaml
+  - serviceaccount.yaml
+  - service-streaming.yaml
+  - service-web.yaml
+tests:
+  - it: should have the kubernetes recommended labels
+    values:
+      - mocks/dev.yaml
+    set:
+      mastodon:
+        createAdmin:
+          enabled: true
+    release:
+      name: "test-suite"
+    chart:
+      version: 1.2.3
+    asserts:
+      - equal:
+          path: metadata.labels.[app.kubernetes.io/instance]
+          value: "test-suite"
+      - equal:
+          path: metadata.labels.[app.kubernetes.io/managed-by]
+          value: "Helm"
+      - equal:
+          path: metadata.labels.[app.kubernetes.io/name]
+          value: "mastodon"
diff --git a/charts/mastodon/tests/__snapshot__/50_sidekiq_test.yaml.snap b/charts/mastodon/tests/__snapshot__/50_sidekiq_test.yaml.snap
new file mode 100644
index 0000000000000000000000000000000000000000..bd53acffc71254703967eca07088ec3ab9c10613
--- /dev/null
+++ b/charts/mastodon/tests/__snapshot__/50_sidekiq_test.yaml.snap
@@ -0,0 +1,147 @@
+should match basic snapshot:
+  1: |
+    apiVersion: v1
+    data:
+      DB_HOST: RELEASE-NAME-postgresql
+      DB_NAME: mastodon_production
+      DB_POOL: "25"
+      DB_PORT: "5432"
+      DB_USER: mastodon
+      DEFAULT_LOCALE: en
+      ES_ENABLED: "true"
+      ES_HOST: RELEASE-NAME-elasticsearch-master-hl
+      ES_PORT: "9200"
+      LOCAL_DOMAIN: mastodon.local
+      MALLOC_ARENA_MAX: "2"
+      NODE_ENV: production
+      PREPARED_STATEMENTS: "true"
+      RAILS_ENV: production
+      REDIS_HOST: RELEASE-NAME-redis-master
+      REDIS_PORT: "6379"
+      SMTP_AUTH_METHOD: plain
+      SMTP_CA_FILE: /etc/ssl/certs/ca-certificates.crt
+      SMTP_DELIVERY_METHOD: smtp
+      SMTP_ENABLE_STARTTLS: auto
+      SMTP_FROM_ADDRESS: notifications@example.com
+      SMTP_OPENSSL_VERIFY_MODE: peer
+      SMTP_PORT: "587"
+      SMTP_SERVER: smtp.mailgun.org
+      STREAMING_CLUSTER_NUM: "1"
+    kind: ConfigMap
+    metadata:
+      labels:
+        app.kubernetes.io/instance: RELEASE-NAME
+        app.kubernetes.io/managed-by: Helm
+        app.kubernetes.io/name: mastodon
+        app.kubernetes.io/version: 4.5.6
+        helm.sh/chart: mastodon-1.2.3
+      name: RELEASE-NAME-mastodon-env
+  2: |
+    apiVersion: apps/v1
+    kind: Deployment
+    metadata:
+      labels:
+        app.kubernetes.io/component: sidekiq-all-queues
+        app.kubernetes.io/instance: RELEASE-NAME
+        app.kubernetes.io/managed-by: Helm
+        app.kubernetes.io/name: mastodon
+        app.kubernetes.io/part-of: rails
+        app.kubernetes.io/version: 4.5.6
+        helm.sh/chart: mastodon-1.2.3
+      name: RELEASE-NAME-mastodon-sidekiq-all-queues
+    spec:
+      replicas: 1
+      selector:
+        matchLabels:
+          app.kubernetes.io/component: sidekiq-all-queues
+          app.kubernetes.io/instance: RELEASE-NAME
+          app.kubernetes.io/name: mastodon
+          app.kubernetes.io/part-of: rails
+      strategy:
+        type: Recreate
+      template:
+        metadata:
+          annotations:
+            checksum/config-configmap: 6171320454845e8c5c867b5db63251ff95089e25c0200ca8f72d6bb9f6535726
+            checksum/config-secrets: c0d40e352ffcd2127af550b605bb0464640cd2960d007d940960d3d69d3c6aa4
+            rollme: "0"
+          labels:
+            app.kubernetes.io/component: sidekiq-all-queues
+            app.kubernetes.io/instance: RELEASE-NAME
+            app.kubernetes.io/name: mastodon
+            app.kubernetes.io/part-of: rails
+        spec:
+          containers:
+          - command:
+            - bundle
+            - exec
+            - sidekiq
+            - -c
+            - "25"
+            - -q
+            - default,8
+            - -q
+            - push,6
+            - -q
+            - ingress,4
+            - -q
+            - mailers,2
+            - -q
+            - pull
+            - -q
+            - scheduler
+            env:
+            - name: DB_PASS
+              valueFrom:
+                secretKeyRef:
+                  key: password
+                  name: RELEASE-NAME-postgresql
+            - name: REDIS_PASSWORD
+              valueFrom:
+                secretKeyRef:
+                  key: redis-password
+                  name: RELEASE-NAME-redis
+            envFrom:
+            - configMapRef:
+                name: RELEASE-NAME-mastodon-env
+            - secretRef:
+                name: RELEASE-NAME-mastodon
+            image: ghcr.io/mastodon/mastodon:4.5.6
+            imagePullPolicy: IfNotPresent
+            name: mastodon
+            resources: {}
+            securityContext: {}
+            volumeMounts:
+            - mountPath: /opt/mastodon/public/assets
+              name: assets
+            - mountPath: /opt/mastodon/public/system
+              name: system
+          securityContext:
+            fsGroup: 991
+            runAsGroup: 991
+            runAsUser: 991
+          serviceAccountName: RELEASE-NAME-mastodon
+          volumes:
+          - name: assets
+            persistentVolumeClaim:
+              claimName: RELEASE-NAME-mastodon-assets
+          - name: system
+            persistentVolumeClaim:
+              claimName: RELEASE-NAME-mastodon-system
+  3: |
+    apiVersion: v1
+    data:
+      OTP_SECRET: ZHVtbXktb3RwX3NlY3JldA==
+      SECRET_KEY_BASE: ZHVtbXktc2VjcmV0X2tleV9iYXNl
+      VAPID_PRIVATE_KEY: ZHVtbXktdmFwaWQtcHJpdmF0ZV9rZXk=
+      VAPID_PUBLIC_KEY: ZHVtbXktdmFwaWQtcHVibGljX2tleQ==
+    kind: Secret
+    metadata:
+      labels:
+        app.kubernetes.io/instance: RELEASE-NAME
+        app.kubernetes.io/managed-by: Helm
+        app.kubernetes.io/name: mastodon
+        app.kubernetes.io/version: 4.5.6
+        helm.sh/chart: mastodon-1.2.3
+      name: RELEASE-NAME-mastodon
+    type: Opaque
diff --git a/charts/mastodon/tests/__snapshot__/50_web_test.yaml.snap b/charts/mastodon/tests/__snapshot__/50_web_test.yaml.snap
new file mode 100644
index 0000000000000000000000000000000000000000..5f5ca5e7493aba68246b41826598fbc57e51082e
--- /dev/null
+++ b/charts/mastodon/tests/__snapshot__/50_web_test.yaml.snap
@@ -0,0 +1,204 @@
+should match basic snapshot:
+  1: |
+    apiVersion: v1
+    data:
+      DB_HOST: RELEASE-NAME-postgresql
+      DB_NAME: mastodon_production
+      DB_POOL: "25"
+      DB_PORT: "5432"
+      DB_USER: mastodon
+      DEFAULT_LOCALE: en
+      ES_ENABLED: "true"
+      ES_HOST: RELEASE-NAME-elasticsearch-master-hl
+      ES_PORT: "9200"
+      LOCAL_DOMAIN: mastodon.local
+      MALLOC_ARENA_MAX: "2"
+      NODE_ENV: production
+      PREPARED_STATEMENTS: "true"
+      RAILS_ENV: production
+      REDIS_HOST: RELEASE-NAME-redis-master
+      REDIS_PORT: "6379"
+      SMTP_AUTH_METHOD: plain
+      SMTP_CA_FILE: /etc/ssl/certs/ca-certificates.crt
+      SMTP_DELIVERY_METHOD: smtp
+      SMTP_ENABLE_STARTTLS: auto
+      SMTP_FROM_ADDRESS: notifications@example.com
+      SMTP_OPENSSL_VERIFY_MODE: peer
+      SMTP_PORT: "587"
+      SMTP_SERVER: smtp.mailgun.org
+      STREAMING_CLUSTER_NUM: "1"
+    kind: ConfigMap
+    metadata:
+      labels:
+        app.kubernetes.io/instance: RELEASE-NAME
+        app.kubernetes.io/managed-by: Helm
+        app.kubernetes.io/name: mastodon
+        app.kubernetes.io/version: 4.5.6
+        helm.sh/chart: mastodon-1.2.3
+      name: RELEASE-NAME-mastodon-env
+  2: |
+    apiVersion: apps/v1
+    kind: Deployment
+    metadata:
+      labels:
+        app.kubernetes.io/instance: RELEASE-NAME
+        app.kubernetes.io/managed-by: Helm
+        app.kubernetes.io/name: mastodon
+        app.kubernetes.io/version: 4.5.6
+        helm.sh/chart: mastodon-1.2.3
+      name: RELEASE-NAME-mastodon-web
+    spec:
+      replicas: 1
+      selector:
+        matchLabels:
+          app.kubernetes.io/component: web
+          app.kubernetes.io/instance: RELEASE-NAME
+          app.kubernetes.io/name: mastodon
+          app.kubernetes.io/part-of: rails
+      template:
+        metadata:
+          annotations:
+            checksum/config-configmap: 6171320454845e8c5c867b5db63251ff95089e25c0200ca8f72d6bb9f6535726
+            checksum/config-secrets: c0d40e352ffcd2127af550b605bb0464640cd2960d007d940960d3d69d3c6aa4
+            rollme: "0"
+          labels:
+            app.kubernetes.io/component: web
+            app.kubernetes.io/instance: RELEASE-NAME
+            app.kubernetes.io/name: mastodon
+            app.kubernetes.io/part-of: rails
+        spec:
+          containers:
+          - command:
+            - bundle
+            - exec
+            - puma
+            - -C
+            - config/puma.rb
+            env:
+            - name: DB_PASS
+              valueFrom:
+                secretKeyRef:
+                  key: password
+                  name: RELEASE-NAME-postgresql
+            - name: REDIS_PASSWORD
+              valueFrom:
+                secretKeyRef:
+                  key: redis-password
+                  name: RELEASE-NAME-redis
+            - name: PORT
+              value: "3000"
+            envFrom:
+            - configMapRef:
+                name: RELEASE-NAME-mastodon-env
+            - secretRef:
+                name: RELEASE-NAME-mastodon
+            image: ghcr.io/mastodon/mastodon:4.5.6
+            imagePullPolicy: IfNotPresent
+            livenessProbe:
+              tcpSocket:
+                port: http
+            name: mastodon-web
+            ports:
+            - containerPort: 3000
+              name: http
+              protocol: TCP
+            readinessProbe:
+              httpGet:
+                path: /health
+                port: http
+            startupProbe:
+              failureThreshold: 30
+              httpGet:
+                path: /health
+                port: http
+              periodSeconds: 5
+            volumeMounts:
+            - mountPath: /opt/mastodon/public/assets
+              name: assets
+            - mountPath: /opt/mastodon/public/system
+              name: system
+          securityContext:
+            fsGroup: 991
+            runAsGroup: 991
+            runAsUser: 991
+          serviceAccountName: RELEASE-NAME-mastodon
+          volumes:
+          - name: assets
+            persistentVolumeClaim:
+              claimName: RELEASE-NAME-mastodon-assets
+          - name: system
+            persistentVolumeClaim:
+              claimName: RELEASE-NAME-mastodon-system
+  3: |
+    apiVersion: networking.k8s.io/v1
+    kind: Ingress
+    metadata:
+      labels:
+        app.kubernetes.io/instance: RELEASE-NAME
+        app.kubernetes.io/managed-by: Helm
+        app.kubernetes.io/name: mastodon
+        app.kubernetes.io/version: 4.5.6
+        helm.sh/chart: mastodon-1.2.3
+      name: RELEASE-NAME-mastodon
+    spec:
+      rules:
+      - host: mastodon.local
+        http:
+          paths:
+          - backend:
+              service:
+                name: RELEASE-NAME-mastodon-web
+                port:
+                  number: 3000
+            path: /
+            pathType: Prefix
+          - backend:
+              service:
+                name: RELEASE-NAME-mastodon-streaming
+                port:
+                  number: 4000
+            path: /api/v1/streaming
+            pathType: Prefix
+      tls:
+      - hosts:
+        - mastodon.local
+        secretName: mastodon-tls
+  4: |
+    apiVersion: v1
+    data:
+      OTP_SECRET: ZHVtbXktb3RwX3NlY3JldA==
+      SECRET_KEY_BASE: ZHVtbXktc2VjcmV0X2tleV9iYXNl
+      VAPID_PRIVATE_KEY: ZHVtbXktdmFwaWQtcHJpdmF0ZV9rZXk=
+      VAPID_PUBLIC_KEY: ZHVtbXktdmFwaWQtcHVibGljX2tleQ==
+    kind: Secret
+    metadata:
+      labels:
+        app.kubernetes.io/instance: RELEASE-NAME
+        app.kubernetes.io/managed-by: Helm
+        app.kubernetes.io/name: mastodon
+        app.kubernetes.io/version: 4.5.6
+        helm.sh/chart: mastodon-1.2.3
+      name: RELEASE-NAME-mastodon
+    type: Opaque
+  5: |
+    apiVersion: v1
+    kind: Service
+    metadata:
+      labels:
+        app.kubernetes.io/instance: RELEASE-NAME
+        app.kubernetes.io/managed-by: Helm
+        app.kubernetes.io/name: mastodon
+        app.kubernetes.io/version: 4.5.6
+        helm.sh/chart: mastodon-1.2.3
+      name: RELEASE-NAME-mastodon-web
+    spec:
+      ports:
+      - name: http
+        port: 3000
+        protocol: TCP
+        targetPort: http
+      selector:
+        app.kubernetes.io/component: web
+        app.kubernetes.io/instance: RELEASE-NAME
+        app.kubernetes.io/name: mastodon
+      type: ClusterIP
diff --git a/charts/mastodon/tests/__snapshot__/98_snapshot_test.yaml.snap b/charts/mastodon/tests/__snapshot__/98_snapshot_test.yaml.snap
new file mode 100644
index 0000000000000000000000000000000000000000..92c567d5c92f5fe0f17ce865f4cf368258c997dd
--- /dev/null
+++ b/charts/mastodon/tests/__snapshot__/98_snapshot_test.yaml.snap
@@ -0,0 +1,811 @@
+should match basic snapshot:
+  1: |
+    apiVersion: v1
+    data:
+      DB_HOST: RELEASE-NAME-postgresql
+      DB_NAME: mastodon_production
+      DB_POOL: "25"
+      DB_PORT: "5432"
+      DB_USER: mastodon
+      DEFAULT_LOCALE: en
+      ES_ENABLED: "true"
+      ES_HOST: RELEASE-NAME-elasticsearch-master-hl
+      ES_PORT: "9200"
+      LOCAL_DOMAIN: mastodon.local
+      MALLOC_ARENA_MAX: "2"
+      NODE_ENV: production
+      PREPARED_STATEMENTS: "true"
+      RAILS_ENV: production
+      REDIS_HOST: RELEASE-NAME-redis-master
+      REDIS_PORT: "6379"
+      SMTP_AUTH_METHOD: plain
+      SMTP_CA_FILE: /etc/ssl/certs/ca-certificates.crt
+      SMTP_DELIVERY_METHOD: smtp
+      SMTP_ENABLE_STARTTLS: auto
+      SMTP_FROM_ADDRESS: notifications@example.com
+      SMTP_OPENSSL_VERIFY_MODE: peer
+      SMTP_PORT: "587"
+      SMTP_SERVER: smtp.mailgun.org
+      STREAMING_CLUSTER_NUM: "1"
+    kind: ConfigMap
+    metadata:
+      labels:
+        app.kubernetes.io/instance: RELEASE-NAME
+        app.kubernetes.io/managed-by: Helm
+        app.kubernetes.io/name: mastodon
+        app.kubernetes.io/version: 4.5.6
+        helm.sh/chart: mastodon-1.2.3
+      name: RELEASE-NAME-mastodon-env
+  2: |
+    apiVersion: batch/v1
+    kind: CronJob
+    metadata:
+      labels:
+        app.kubernetes.io/instance: RELEASE-NAME
+        app.kubernetes.io/managed-by: Helm
+        app.kubernetes.io/name: mastodon
+        app.kubernetes.io/version: 4.5.6
+        helm.sh/chart: mastodon-1.2.3
+      name: RELEASE-NAME-mastodon-media-remove
+    spec:
+      jobTemplate:
+        spec:
+          template:
+            metadata:
+              name: RELEASE-NAME-mastodon-media-remove
+            spec:
+              affinity:
+                podAffinity:
+                  requiredDuringSchedulingIgnoredDuringExecution:
+                  - labelSelector:
+                      matchExpressions:
+                      - key: app.kubernetes.io/part-of
+                        operator: In
+                        values:
+                        - rails
+                    topologyKey: kubernetes.io/hostname
+              containers:
+              - command:
+                - bin/tootctl
+                - media
+                - remove
+                env:
+                - name: DB_PASS
+                  valueFrom:
+                    secretKeyRef:
+                      key: password
+                      name: RELEASE-NAME-postgresql
+                - name: REDIS_PASSWORD
+                  valueFrom:
+                    secretKeyRef:
+                      key: redis-password
+                      name: RELEASE-NAME-redis
+                - name: PORT
+                  value: "3000"
+                envFrom:
+                - configMapRef:
+                    name: RELEASE-NAME-mastodon-env
+                - secretRef:
+                    name: RELEASE-NAME-mastodon
+                image: ghcr.io/mastodon/mastodon:4.5.6
+                imagePullPolicy: IfNotPresent
+                name: RELEASE-NAME-mastodon-media-remove
+                volumeMounts:
+                - mountPath: /opt/mastodon/public/assets
+                  name: assets
+                - mountPath: /opt/mastodon/public/system
+                  name: system
+              restartPolicy: OnFailure
+              volumes:
+              - name: assets
+                persistentVolumeClaim:
+                  claimName: RELEASE-NAME-mastodon-assets
+              - name: system
+                persistentVolumeClaim:
+                  claimName: RELEASE-NAME-mastodon-system
+      schedule: 0 0 * * 0
+  3: |
+    apiVersion: apps/v1
+    kind: Deployment
+    metadata:
+      labels:
+        app.kubernetes.io/component: sidekiq-all-queues
+        app.kubernetes.io/instance: RELEASE-NAME
+        app.kubernetes.io/managed-by: Helm
+        app.kubernetes.io/name: mastodon
+        app.kubernetes.io/part-of: rails
+        app.kubernetes.io/version: 4.5.6
+        helm.sh/chart: mastodon-1.2.3
+      name: RELEASE-NAME-mastodon-sidekiq-all-queues
+    spec:
+      replicas: 1
+      selector:
+        matchLabels:
+          app.kubernetes.io/component: sidekiq-all-queues
+          app.kubernetes.io/instance: RELEASE-NAME
+          app.kubernetes.io/name: mastodon
+          app.kubernetes.io/part-of: rails
+      strategy:
+        type: Recreate
+      template:
+        metadata:
+          annotations:
+            checksum/config-configmap: 6171320454845e8c5c867b5db63251ff95089e25c0200ca8f72d6bb9f6535726
+            checksum/config-secrets: c0d40e352ffcd2127af550b605bb0464640cd2960d007d940960d3d69d3c6aa4
+            rollme: "0"
+          labels:
+            app.kubernetes.io/component: sidekiq-all-queues
+            app.kubernetes.io/instance: RELEASE-NAME
+            app.kubernetes.io/name: mastodon
+            app.kubernetes.io/part-of: rails
+        spec:
+          containers:
+          - command:
+            - bundle
+            - exec
+            - sidekiq
+            - -c
+            - "25"
+            - -q
+            - default,8
+            - -q
+            - push,6
+            - -q
+            - ingress,4
+            - -q
+            - mailers,2
+            - -q
+            - pull
+            - -q
+            - scheduler
+            env:
+            - name: DB_PASS
+              valueFrom:
+                secretKeyRef:
+                  key: password
+                  name: RELEASE-NAME-postgresql
+            - name: REDIS_PASSWORD
+              valueFrom:
+                secretKeyRef:
+                  key: redis-password
+                  name: RELEASE-NAME-redis
+            envFrom:
+            - configMapRef:
+                name: RELEASE-NAME-mastodon-env
+            - secretRef:
+                name: RELEASE-NAME-mastodon
+            image: ghcr.io/mastodon/mastodon:4.5.6
+            imagePullPolicy: IfNotPresent
+            name: mastodon
+            resources: {}
+            securityContext: {}
+            volumeMounts:
+            - mountPath: /opt/mastodon/public/assets
+              name: assets
+            - mountPath: /opt/mastodon/public/system
+              name: system
+          securityContext:
+            fsGroup: 991
+            runAsGroup: 991
+            runAsUser: 991
+          serviceAccountName: RELEASE-NAME-mastodon
+          volumes:
+          - name: assets
+            persistentVolumeClaim:
+              claimName: RELEASE-NAME-mastodon-assets
+          - name: system
+            persistentVolumeClaim:
+              claimName: RELEASE-NAME-mastodon-system
+  4: |
+    apiVersion: apps/v1
+    kind: Deployment
+    metadata:
+      labels:
+        app.kubernetes.io/instance: RELEASE-NAME
+        app.kubernetes.io/managed-by: Helm
+        app.kubernetes.io/name: mastodon
+        app.kubernetes.io/version: 4.5.6
+        helm.sh/chart: mastodon-1.2.3
+      name: RELEASE-NAME-mastodon-streaming
+    spec:
+      replicas: 1
+      selector:
+        matchLabels:
+          app.kubernetes.io/component: streaming
+          app.kubernetes.io/instance: RELEASE-NAME
+          app.kubernetes.io/name: mastodon
+      template:
+        metadata:
+          annotations:
+            checksum/config-configmap: 6171320454845e8c5c867b5db63251ff95089e25c0200ca8f72d6bb9f6535726
+            checksum/config-secrets: c0d40e352ffcd2127af550b605bb0464640cd2960d007d940960d3d69d3c6aa4
+            rollme: "0"
+          labels:
+            app.kubernetes.io/component: streaming
+            app.kubernetes.io/instance: RELEASE-NAME
+            app.kubernetes.io/name: mastodon
+        spec:
+          containers:
+          - command:
+            - node
+            - ./streaming
+            env:
+            - name: DB_PASS
+              valueFrom:
+                secretKeyRef:
+                  key: password
+                  name: RELEASE-NAME-postgresql
+            - name: REDIS_PASSWORD
+              valueFrom:
+                secretKeyRef:
+                  key: redis-password
+                  name: RELEASE-NAME-redis
+            - name: PORT
+              value: "4000"
+            envFrom:
+            - configMapRef:
+                name: RELEASE-NAME-mastodon-env
+            - secretRef:
+                name: RELEASE-NAME-mastodon
+            image: ghcr.io/mastodon/mastodon:4.5.6
+            imagePullPolicy: IfNotPresent
+            livenessProbe:
+              httpGet:
+                path: /api/v1/streaming/health
+                port: streaming
+            name: mastodon-streaming
+            ports:
+            - containerPort: 4000
+              name: streaming
+              protocol: TCP
+            readinessProbe:
+              httpGet:
+                path: /api/v1/streaming/health
+                port: streaming
+          securityContext:
+            fsGroup: 991
+            runAsGroup: 991
+            runAsUser: 991
+          serviceAccountName: RELEASE-NAME-mastodon
+  5: |
+    apiVersion: apps/v1
+    kind: Deployment
+    metadata:
+      labels:
+        app.kubernetes.io/instance: RELEASE-NAME
+        app.kubernetes.io/managed-by: Helm
+        app.kubernetes.io/name: mastodon
+        app.kubernetes.io/version: 4.5.6
+        helm.sh/chart: mastodon-1.2.3
+      name: RELEASE-NAME-mastodon-web
+    spec:
+      replicas: 1
+      selector:
+        matchLabels:
+          app.kubernetes.io/component: web
+          app.kubernetes.io/instance: RELEASE-NAME
+          app.kubernetes.io/name: mastodon
+          app.kubernetes.io/part-of: rails
+      template:
+        metadata:
+          annotations:
+            checksum/config-configmap: 6171320454845e8c5c867b5db63251ff95089e25c0200ca8f72d6bb9f6535726
+            checksum/config-secrets: c0d40e352ffcd2127af550b605bb0464640cd2960d007d940960d3d69d3c6aa4
+            rollme: "0"
+          labels:
+            app.kubernetes.io/component: web
+            app.kubernetes.io/instance: RELEASE-NAME
+            app.kubernetes.io/name: mastodon
+            app.kubernetes.io/part-of: rails
+        spec:
+          containers:
+          - command:
+            - bundle
+            - exec
+            - puma
+            - -C
+            - config/puma.rb
+            env:
+            - name: DB_PASS
+              valueFrom:
+                secretKeyRef:
+                  key: password
+                  name: RELEASE-NAME-postgresql
+            - name: REDIS_PASSWORD
+              valueFrom:
+                secretKeyRef:
+                  key: redis-password
+                  name: RELEASE-NAME-redis
+            - name: PORT
+              value: "3000"
+            envFrom:
+            - configMapRef:
+                name: RELEASE-NAME-mastodon-env
+            - secretRef:
+                name: RELEASE-NAME-mastodon
+            image: ghcr.io/mastodon/mastodon:4.5.6
+            imagePullPolicy: IfNotPresent
+            livenessProbe:
+              tcpSocket:
+                port: http
+            name: mastodon-web
+            ports:
+            - containerPort: 3000
+              name: http
+              protocol: TCP
+            readinessProbe:
+              httpGet:
+                path: /health
+                port: http
+            startupProbe:
+              failureThreshold: 30
+              httpGet:
+                path: /health
+                port: http
+              periodSeconds: 5
+            volumeMounts:
+            - mountPath: /opt/mastodon/public/assets
+              name: assets
+            - mountPath: /opt/mastodon/public/system
+              name: system
+          securityContext:
+            fsGroup: 991
+            runAsGroup: 991
+            runAsUser: 991
+          serviceAccountName: RELEASE-NAME-mastodon
+          volumes:
+          - name: assets
+            persistentVolumeClaim:
+              claimName: RELEASE-NAME-mastodon-assets
+          - name: system
+            persistentVolumeClaim:
+              claimName: RELEASE-NAME-mastodon-system
+  6: |
+    apiVersion: networking.k8s.io/v1
+    kind: Ingress
+    metadata:
+      labels:
+        app.kubernetes.io/instance: RELEASE-NAME
+        app.kubernetes.io/managed-by: Helm
+        app.kubernetes.io/name: mastodon
+        app.kubernetes.io/version: 4.5.6
+        helm.sh/chart: mastodon-1.2.3
+      name: RELEASE-NAME-mastodon
+    spec:
+      rules:
+      - host: mastodon.local
+        http:
+          paths:
+          - backend:
+              service:
+                name: RELEASE-NAME-mastodon-web
+                port:
+                  number: 3000
+            path: /
+            pathType: Prefix
+          - backend:
+              service:
+                name: RELEASE-NAME-mastodon-streaming
+                port:
+                  number: 4000
+            path: /api/v1/streaming
+            pathType: Prefix
+      tls:
+      - hosts:
+        - mastodon.local
+        secretName: mastodon-tls
+  7: |
+    apiVersion: batch/v1
+    kind: Job
+    metadata:
+      annotations:
+        helm.sh/hook: post-install
+        helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
+        helm.sh/hook-weight: "-2"
+      labels:
+        app.kubernetes.io/instance: RELEASE-NAME
+        app.kubernetes.io/managed-by: Helm
+        app.kubernetes.io/name: mastodon
+        app.kubernetes.io/version: 4.5.6
+        helm.sh/chart: mastodon-1.2.3
+      name: RELEASE-NAME-mastodon-assets-precompile
+    spec:
+      template:
+        metadata:
+          name: RELEASE-NAME-mastodon-assets-precompile
+        spec:
+          containers:
+          - command:
+            - bash
+            - -c
+            - |
+              bundle exec rake assets:precompile && yarn cache clean
+            env:
+            - name: DB_PASS
+              valueFrom:
+                secretKeyRef:
+                  key: password
+                  name: RELEASE-NAME-postgresql
+            - name: REDIS_PASSWORD
+              valueFrom:
+                secretKeyRef:
+                  key: redis-password
+                  name: RELEASE-NAME-redis
+            - name: PORT
+              value: "3000"
+            envFrom:
+            - configMapRef:
+                name: RELEASE-NAME-mastodon-env
+            - secretRef:
+                name: RELEASE-NAME-mastodon
+            image: ghcr.io/mastodon/mastodon:4.5.6
+            imagePullPolicy: IfNotPresent
+            name: RELEASE-NAME-mastodon-assets-precompile
+            volumeMounts:
+            - mountPath: /opt/mastodon/public/assets
+              name: assets
+            - mountPath: /opt/mastodon/public/system
+              name: system
+          restartPolicy: Never
+          volumes:
+          - name: assets
+            persistentVolumeClaim:
+              claimName: RELEASE-NAME-mastodon-assets
+          - name: system
+            persistentVolumeClaim:
+              claimName: RELEASE-NAME-mastodon-system
+  8: |
+    apiVersion: batch/v1
+    kind: Job
+    metadata:
+      annotations:
+        helm.sh/hook: post-install
+        helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
+        helm.sh/hook-weight: "-1"
+      labels:
+        app.kubernetes.io/instance: RELEASE-NAME
+        app.kubernetes.io/managed-by: Helm
+        app.kubernetes.io/name: mastodon
+        app.kubernetes.io/version: 4.5.6
+        helm.sh/chart: mastodon-1.2.3
+      name: RELEASE-NAME-mastodon-chewy-upgrade
+    spec:
+      template:
+        metadata:
+          name: RELEASE-NAME-mastodon-chewy-upgrade
+        spec:
+          containers:
+          - command:
+            - bundle
+            - exec
+            - rake
+            - chewy:upgrade
+            env:
+            - name: DB_PASS
+              valueFrom:
+                secretKeyRef:
+                  key: password
+                  name: RELEASE-NAME-postgresql
+            - name: REDIS_PASSWORD
+              valueFrom:
+                secretKeyRef:
+                  key: redis-password
+                  name: RELEASE-NAME-redis
+            - name: PORT
+              value: "3000"
+            envFrom:
+            - configMapRef:
+                name: RELEASE-NAME-mastodon-env
+            - secretRef:
+                name: RELEASE-NAME-mastodon
+            image: ghcr.io/mastodon/mastodon:4.5.6
+            imagePullPolicy: IfNotPresent
+            name: RELEASE-NAME-mastodon-chewy-setup
+            volumeMounts:
+            - mountPath: /opt/mastodon/public/assets
+              name: assets
+            - mountPath: /opt/mastodon/public/system
+              name: system
+          restartPolicy: Never
+          volumes:
+          - name: assets
+            persistentVolumeClaim:
+              claimName: RELEASE-NAME-mastodon-assets
+          - name: system
+            persistentVolumeClaim:
+              claimName: RELEASE-NAME-mastodon-system
+  9: |
+    apiVersion: batch/v1
+    kind: Job
+    metadata:
+      annotations:
+        helm.sh/hook: post-install
+        helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
+        helm.sh/hook-weight: "-1"
+      labels:
+        app.kubernetes.io/instance: RELEASE-NAME
+        app.kubernetes.io/managed-by: Helm
+        app.kubernetes.io/name: mastodon
+        app.kubernetes.io/version: 4.5.6
+        helm.sh/chart: mastodon-1.2.3
+      name: RELEASE-NAME-mastodon-create-admin
+    spec:
+      template:
+        metadata:
+          name: RELEASE-NAME-mastodon-create-admin
+        spec:
+          containers:
+          - command:
+            - bin/tootctl
+            - accounts
+            - create
+            - not_gargron
+            - --email
+            - not@example.com
+            - --confirmed
+            - --role
+            - Owner
+            env:
+            - name: DB_PASS
+              valueFrom:
+                secretKeyRef:
+                  key: password
+                  name: RELEASE-NAME-postgresql
+            - name: REDIS_PASSWORD
+              valueFrom:
+                secretKeyRef:
+                  key: redis-password
+                  name: RELEASE-NAME-redis
+            - name: PORT
+              value: "3000"
+            envFrom:
+            - configMapRef:
+                name: RELEASE-NAME-mastodon-env
+            - secretRef:
+                name: RELEASE-NAME-mastodon
+            image: ghcr.io/mastodon/mastodon:4.5.6
+            imagePullPolicy: IfNotPresent
+            name: RELEASE-NAME-mastodon-create-admin
+            volumeMounts:
+            - mountPath: /opt/mastodon/public/assets
+              name: assets
+            - mountPath: /opt/mastodon/public/system
+              name: system
+          restartPolicy: Never
+          volumes:
+          - name: assets
+            persistentVolumeClaim:
+              claimName: RELEASE-NAME-mastodon-assets
+          - name: system
+            persistentVolumeClaim:
+              claimName: RELEASE-NAME-mastodon-system
+  10: |
+    apiVersion: batch/v1
+    kind: Job
+    metadata:
+      annotations:
+        helm.sh/hook: post-install,post-upgrade
+        helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
+        helm.sh/hook-weight: "-2"
+      labels:
+        app.kubernetes.io/instance: RELEASE-NAME
+        app.kubernetes.io/managed-by: Helm
+        app.kubernetes.io/name: mastodon
+        app.kubernetes.io/version: 4.5.6
+        helm.sh/chart: mastodon-1.2.3
+      name: RELEASE-NAME-mastodon-db-migrate
+    spec:
+      template:
+        metadata:
+          name: RELEASE-NAME-mastodon-db-migrate
+        spec:
+          containers:
+          - command:
+            - bundle
+            - exec
+            - rake
+            - db:migrate
+            env:
+            - name: DB_PASS
+              valueFrom:
+                secretKeyRef:
+                  key: password
+                  name: RELEASE-NAME-postgresql
+            - name: REDIS_PASSWORD
+              valueFrom:
+                secretKeyRef:
+                  key: redis-password
+                  name: RELEASE-NAME-redis
+            - name: PORT
+              value: "3000"
+            envFrom:
+            - configMapRef:
+                name: RELEASE-NAME-mastodon-env
+            - secretRef:
+                name: RELEASE-NAME-mastodon
+            image: ghcr.io/mastodon/mastodon:4.5.6
+            imagePullPolicy: IfNotPresent
+            name: RELEASE-NAME-mastodon-db-migrate
+            volumeMounts:
+            - mountPath: /opt/mastodon/public/assets
+              name: assets
+            - mountPath: /opt/mastodon/public/system
+              name: system
+          restartPolicy: Never
+          volumes:
+          - name: assets
+            persistentVolumeClaim:
+              claimName: RELEASE-NAME-mastodon-assets
+          - name: system
+            persistentVolumeClaim:
+              claimName: RELEASE-NAME-mastodon-system
+  11: |
+    apiVersion: batch/v1
+    kind: Job
+    metadata:
+      annotations:
+        helm.sh/hook: pre-upgrade
+        helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
+        helm.sh/hook-weight: "-2"
+      labels:
+        app.kubernetes.io/instance: RELEASE-NAME
+        app.kubernetes.io/managed-by: Helm
+        app.kubernetes.io/name: mastodon
+        app.kubernetes.io/version: 4.5.6
+        helm.sh/chart: mastodon-1.2.3
+      name: RELEASE-NAME-mastodon-db-migrate
+    spec:
+      template:
+        metadata:
+          name: RELEASE-NAME-mastodon-db-migrate
+        spec:
+          containers:
+          - command:
+            - bundle
+            - exec
+            - rake
+            - db:migrate
+            env:
+            - name: DB_PASS
+              valueFrom:
+                secretKeyRef:
+                  key: password
+                  name: RELEASE-NAME-postgresql
+            - name: REDIS_PASSWORD
+              valueFrom:
+                secretKeyRef:
+                  key: redis-password
+                  name: RELEASE-NAME-redis
+            - name: PORT
+              value: "3000"
+            - name: SKIP_POST_DEPLOYMENT_MIGRATIONS
+              value: "true"
+            envFrom:
+            - configMapRef:
+                name: RELEASE-NAME-mastodon-env
+            - secretRef:
+                name: RELEASE-NAME-mastodon
+            image: ghcr.io/mastodon/mastodon:4.5.6
+            imagePullPolicy: IfNotPresent
+            name: RELEASE-NAME-mastodon-db-migrate
+            volumeMounts:
+            - mountPath: /opt/mastodon/public/assets
+              name: assets
+            - mountPath: /opt/mastodon/public/system
+              name: system
+          restartPolicy: Never
+          volumes:
+          - name: assets
+            persistentVolumeClaim:
+              claimName: RELEASE-NAME-mastodon-assets
+          - name: system
+            persistentVolumeClaim:
+              claimName: RELEASE-NAME-mastodon-system
+  12: |
+    apiVersion: v1
+    kind: PersistentVolumeClaim
+    metadata:
+      labels:
+        app.kubernetes.io/instance: RELEASE-NAME
+        app.kubernetes.io/managed-by: Helm
+        app.kubernetes.io/name: mastodon
+        app.kubernetes.io/version: 4.5.6
+        helm.sh/chart: mastodon-1.2.3
+      name: RELEASE-NAME-mastodon-assets
+    spec:
+      accessModes:
+      - ReadWriteOnce
+      resources:
+        requests:
+          storage: 10Gi
+      storageClassName: null
+  13: |
+    apiVersion: v1
+    kind: PersistentVolumeClaim
+    metadata:
+      labels:
+        app.kubernetes.io/instance: RELEASE-NAME
+        app.kubernetes.io/managed-by: Helm
+        app.kubernetes.io/name: mastodon
+        app.kubernetes.io/version: 4.5.6
+        helm.sh/chart: mastodon-1.2.3
+      name: RELEASE-NAME-mastodon-system
+    spec:
+      accessModes:
+      - ReadWriteOnce
+      resources:
+        requests:
+          storage: 100Gi
+      storageClassName: null
+  14: |
+    apiVersion: v1
+    data:
+      OTP_SECRET: ZHVtbXktb3RwX3NlY3JldA==
+      SECRET_KEY_BASE: ZHVtbXktc2VjcmV0X2tleV9iYXNl
+      VAPID_PRIVATE_KEY: ZHVtbXktdmFwaWQtcHJpdmF0ZV9rZXk=
+      VAPID_PUBLIC_KEY: ZHVtbXktdmFwaWQtcHVibGljX2tleQ==
+    kind: Secret
+    metadata:
+      labels:
+        app.kubernetes.io/instance: RELEASE-NAME
+        app.kubernetes.io/managed-by: Helm
+        app.kubernetes.io/name: mastodon
+        app.kubernetes.io/version: 4.5.6
+        helm.sh/chart: mastodon-1.2.3
+      name: RELEASE-NAME-mastodon
+    type: Opaque
+  15: |
+    apiVersion: v1
+    kind: ServiceAccount
+    metadata:
+      labels:
+        app.kubernetes.io/instance: RELEASE-NAME
+        app.kubernetes.io/managed-by: Helm
+        app.kubernetes.io/name: mastodon
+        app.kubernetes.io/version: 4.5.6
+        helm.sh/chart: mastodon-1.2.3
+      name: RELEASE-NAME-mastodon
+  16: |
+    apiVersion: v1
+    kind: Service
+    metadata:
+      labels:
+        app.kubernetes.io/instance: RELEASE-NAME
+        app.kubernetes.io/managed-by: Helm
+        app.kubernetes.io/name: mastodon
+        app.kubernetes.io/version: 4.5.6
+        helm.sh/chart: mastodon-1.2.3
+      name: RELEASE-NAME-mastodon-streaming
+    spec:
+      ports:
+      - name: streaming
+        port: 4000
+        protocol: TCP
+        targetPort: streaming
+      selector:
+        app.kubernetes.io/component: streaming
+        app.kubernetes.io/instance: RELEASE-NAME
+        app.kubernetes.io/name: mastodon
+      type: ClusterIP
+  17: |
+    apiVersion: v1
+    kind: Service
+    metadata:
+      labels:
+        app.kubernetes.io/instance: RELEASE-NAME
+        app.kubernetes.io/managed-by: Helm
+        app.kubernetes.io/name: mastodon
+        app.kubernetes.io/version: 4.5.6
+        helm.sh/chart: mastodon-1.2.3
+      name: RELEASE-NAME-mastodon-web
+    spec:
+      ports:
+      - name: http
+        port: 3000
+        protocol: TCP
+        targetPort: http
+      selector:
+        app.kubernetes.io/component: web
+        app.kubernetes.io/instance: RELEASE-NAME
+        app.kubernetes.io/name: mastodon
+      type: ClusterIP
diff --git a/charts/mastodon/tests/mocks/dev.yaml b/charts/mastodon/tests/mocks/dev.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..b3a963ea114f9dc7ec7cfe1f3a181a7d25366188
--- /dev/null
+++ b/charts/mastodon/tests/mocks/dev.yaml
@@ -0,0 +1,25 @@
+# Chart values used for testing the Helm chart.
+#
+mastodon:
+  secrets:
+    secret_key_base: dummy-secret_key_base
+    otp_secret: dummy-otp_secret
+    vapid:
+      private_key: dummy-vapid-private_key
+      public_key: dummy-vapid-public_key
+
+# ref: https://github.com/bitnami/charts/tree/main/bitnami/redis#parameters
+redis:
+  replica:
+    replicaCount: 1
+
+# ref: https://github.com/bitnami/charts/tree/main/bitnami/elasticsearch#parameters
+elasticsearch:
+  master:
+    replicaCount: 1
+  data:
+    replicaCount: 1
+  coordinating:
+    replicaCount: 1
+  ingest:
+    replicaCount: 1
diff --git a/charts/mastodon/tests/mocks/sidekiq.yaml b/charts/mastodon/tests/mocks/sidekiq.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..0903eba13b0c8fda28885c1158fae99d36ce4a6f
--- /dev/null
+++ b/charts/mastodon/tests/mocks/sidekiq.yaml
@@ -0,0 +1,13 @@
+mastodon:
+  sidekiq:
+    workers:
+      - name: scheduler
+        concurrency: 25
+        replicas: 1
+        queues:
+          - scheduler
+      - name: default
+        concurrency: 25
+        replicas: 2
+        queues:
+          - default
\ No newline at end of file