diff --git a/test/views/settings/formSearchObject.test.js b/test/views/settings/formSearchObject.test.js
new file mode 100644
index 0000000000000000000000000000000000000000..fb6021a186ee4d5be6f6f438424d1f01c8f3b577
--- /dev/null
+++ b/test/views/settings/formSearchObject.test.js
@@ -0,0 +1,213 @@
+import { formSearchObject } from '@/store/modules/normalizers'
+import _ from 'lodash'
+
+describe('Form search object', () => {
+  it('forms search object for regular setting', () => {
+    const description = [{
+      description: "Upload general settings",
+      group: ":pleroma",
+      key: "Pleroma.Upload",
+      label: "Pleroma.Upload",
+      children: [
+        { description: "Module which will be used for uploads",
+          key: ":uploader",
+          label: "Uploader" },
+        { description: "List of filter modules for uploads",
+          key: ":filters",
+          label: "Filters" }
+      ]
+    }]
+    const expected = [
+      { label: "Pleroma.Upload",
+        key: "Pleroma.Upload",
+        groupKey: "Pleroma.Upload",
+        groupLabel: "Pleroma.Upload",
+        search: [
+          "pleroma.upload",
+          "pleroma.upload",
+          "upload general settings"
+        ]
+      },
+      { label: "Uploader",
+        key: ":uploader",
+        groupKey: "Pleroma.Upload",
+        groupLabel: "Pleroma.Upload",
+        search: [
+          ":uploader",
+          "uploader",
+          "module which will be used for uploads"
+        ]
+      },
+      { label: "Filters",
+        key: ":filters",
+        groupKey: "Pleroma.Upload",
+        groupLabel: "Pleroma.Upload",
+        search: [
+          ":filters",
+          "filters",
+          "list of filter modules for uploads"
+        ]
+      }
+    ]
+    expect(_.isEqual(formSearchObject(description), expected)).toBeTruthy()
+  })
+
+  it('forms search object for setting without key', () => {
+    const description = [{
+      description: "`Swoosh.Adapters.Local` adapter specific settings",
+      group: ":swoosh",
+      label: "Swoosh",
+      children: [
+        { description: "Run the preview server together as part of your app",
+          group: [":subgroup", "Swoosh.Adapters.Local"],
+          key: ":serve_mailbox",
+          label: "Serve mailbox"
+        }
+      ]
+    }]
+    const expected = [
+      { label: "Swoosh",
+        key: ":swoosh",
+        groupKey: ":swoosh",
+        groupLabel: "Swoosh",
+        search: ["swoosh", "`swoosh.adapters.local` adapter specific settings"]
+      },
+      { label: "Serve mailbox",
+        key: ":serve_mailbox",
+        groupKey: ":swoosh",
+        groupLabel: "Swoosh",
+        search: [
+          ":serve_mailbox",
+          "serve mailbox",
+          "run the preview server together as part of your app"
+        ]
+      }
+    ]
+    expect(_.isEqual(formSearchObject(description), expected)).toBeTruthy()
+  })
+
+  it('forms search object for setting without key', () => {
+    const description = [{
+      group: ":cors_plug",
+      label: "Cors plug",
+      children: [
+        { key: ":max_age",
+          label: "Max age" },
+        { key: ":methods",
+          label: "Methods" }
+      ]
+    }]
+    const expected = [
+      { label: "Cors plug",
+        key: ":cors_plug",
+        groupKey: ":cors_plug",
+        groupLabel: "Cors plug",
+        search: ["cors plug"]
+      },
+      { label: "Max age",
+        key: ":max_age",
+        groupKey: ":cors_plug",
+        groupLabel: "Cors plug",
+        search: [":max_age", "max age"]
+      },
+      { label: "Methods",
+        key: ":methods",
+        groupKey: ":cors_plug",
+        groupLabel: "Cors plug",
+        search: [":methods", "methods"]
+      }
+    ]
+    expect(_.isEqual(formSearchObject(description), expected)).toBeTruthy()
+  })
+
+  it('forms search object for setting without key in pleroma group', () => {
+    const description = [{
+      description: "Allows to set a token",
+      group: ":pleroma",
+      label: "Pleroma",
+      children: [
+        { description: "Token",
+          key: ":admin_token",
+          label: "Admin token" }
+      ]
+    }]
+    const expected = [{
+      label: "Admin token",
+      key: ":admin_token",
+      groupKey: ":pleroma",
+      groupLabel: "Pleroma",
+      search: [":admin_token", "admin token", "token"]
+    }]
+    expect(_.isEqual(formSearchObject(description), expected)).toBeTruthy()
+  })
+
+  it('forms search object for nested setting', () => {
+    const description = [{
+      description: "Media proxy",
+      group: ":pleroma",
+      key: ":media_proxy",
+      label: "Media proxy",
+      children: [
+        { description: "Options for Pleroma.ReverseProxy",
+        key: ":proxy_opts",
+        label: "Proxy opts",
+        children: [
+          { description: "HTTP options",
+            key: ":http",
+            label: "Http",
+            children: [
+              { description: "Adapter specific options",
+                key: ":adapter",
+                label: "Adapter",
+                children: [
+                  { description: "SSL options for HTTP adapter",
+                    key: ":ssl_options",
+                    label: "SSL Options"
+                  }
+                ]
+              }
+            ]
+          }
+        ]}
+      ]
+    }]
+    const expected = [
+      {
+        label: "Media proxy",
+        key: ":media_proxy",
+        groupKey: ":media_proxy",
+        groupLabel: "Media proxy",
+        search: [":media_proxy", "media proxy", "media proxy"]
+      },
+      {
+        label: "Proxy opts",
+        key: ":proxy_opts",
+        groupKey: ":media_proxy",
+        groupLabel: "Media proxy",
+        search: [":proxy_opts", "proxy opts", "options for pleroma.reverseproxy"]
+      },
+      {
+        label: "Http",
+        key: ":http",
+        groupKey: ":media_proxy",
+        groupLabel: "Media proxy",
+        search: [":http", "http", "http options"]
+      },
+      {
+        label: "Adapter",
+        key: ":adapter",
+        groupKey: ":media_proxy",
+        groupLabel: "Media proxy",
+        search: [":adapter", "adapter", "adapter specific options"]
+      },
+      {
+        label: "SSL Options",
+        key: ":ssl_options",
+        groupKey: ":media_proxy",
+        groupLabel: "Media proxy",
+        search: [":ssl_options", "ssl options", "ssl options for http adapter"]
+      }
+    ]
+    expect(_.isEqual(formSearchObject(description), expected)).toBeTruthy()
+  })
+})