Repository: saleor/saleor

Issue:
'MutationOptions' object has no attribute 'exclude' error when executing authorizationKeyAdd with empty strings
### What I'm trying to achieve
To execute `authorizationKeyAdd` mutation with empty strings.

### Steps to reproduce the problem
1. Execute the following query:
```
mutation AuthorizationKeyAdd($input: AuthorizationKeyInput!, $keyType: AuthorizationKeyType!) {
  authorizationKeyAdd(input: $input, keyType: $keyType) {
    errors {
      field
      message
    }
  }
}
```
where variables are:
```
{
  "input": {
    "key": "",
    "password": ""
  },
  "keyType": "GOOGLE_OAUTH2"
}
```
2. Get this error:
```
{"errors":[{"message":"'MutationOptions' object has no attribute 'exclude'","locations":[{"line":17,"column":3}],"path":["authorizationKeyAdd"]}],"data":{"authorizationKeyAdd":null}}
```

### What I expected to happen
To get the `errors` object.


Discussion:

Resolving patch:
diff --git a/saleor/graphql/core/mutations.py b/saleor/graphql/core/mutations.py
--- a/saleor/graphql/core/mutations.py
+++ b/saleor/graphql/core/mutations.py
@@ -108,7 +108,7 @@ def clean_instance(cls, instance, errors):
         except ValidationError as validation_errors:
             message_dict = validation_errors.message_dict
             for field in message_dict:
-                if field in cls._meta.exclude:
+                if hasattr(cls._meta, 'exclude') and field in cls._meta.exclude:
                     continue
                 for message in message_dict[field]:
                     field = snake_to_camel_case(field)
diff --git a/saleor/graphql/shop/mutations.py b/saleor/graphql/shop/mutations.py
--- a/saleor/graphql/shop/mutations.py
+++ b/saleor/graphql/shop/mutations.py
@@ -26,6 +26,8 @@ class SiteDomainInput(graphene.InputObjectType):
 
 
 class ShopSettingsUpdate(BaseMutation):
+    shop = graphene.Field(Shop, description='Updated Shop')
+
     class Arguments:
         input = ShopSettingsInput(
             description='Fields required to update shop settings.',
@@ -34,9 +36,6 @@ class Arguments:
     class Meta:
         description = 'Updates shop settings'
 
-    shop = graphene.Field(
-        Shop, description='Updated Shop')
-
     @classmethod
     @permission_required('site.manage_settings')
     def mutate(cls, root, info, input):
@@ -56,14 +55,14 @@ def mutate(cls, root, info, input):
 
 
 class ShopDomainUpdate(BaseMutation):
+    shop = graphene.Field(Shop, description='Updated Shop')
+
     class Arguments:
         input = SiteDomainInput(description='Fields required to update site')
 
     class Meta:
         description = 'Updates site domain of the shop'
 
-    shop = graphene.Field(Shop, description='Updated Shop')
-
     @classmethod
     @permission_required('site.manage_settings')
     def mutate(cls, root, info, input):
@@ -71,9 +70,9 @@ def mutate(cls, root, info, input):
         site = info.context.site
         domain = input.get('domain')
         name = input.get('name')
-        if domain:
+        if domain is not None:
             site.domain = domain
-        if name:
+        if name is not None:
             site.name = name
         cls.clean_instance(site, errors)
         if errors:
@@ -83,6 +82,8 @@ def mutate(cls, root, info, input):
 
 
 class HomepageCollectionUpdate(BaseMutation):
+    shop = graphene.Field(Shop, description='Updated Shop')
+
     class Arguments:
         collection = graphene.ID(
             description='Collection displayed on homepage')
@@ -90,9 +91,6 @@ class Arguments:
     class Meta:
         description = 'Updates homepage collection of the shop'
 
-    shop = graphene.Field(
-        Shop, description='Updated Shop')
-
     @classmethod
     @permission_required('site.manage_settings')
     def mutate(cls, root, info, collection):
@@ -111,13 +109,16 @@ def mutate(cls, root, info, collection):
 
 
 class AuthorizationKeyInput(graphene.InputObjectType):
-    key = graphene.String(description='Client authorization key (client ID).')
-    password = graphene.String(description='Client secret.')
+    key = graphene.String(
+        required=True, description='Client authorization key (client ID).')
+    password = graphene.String(
+        required=True, description='Client secret.')
 
 
 class AuthorizationKeyAdd(BaseMutation):
     authorization_key = graphene.Field(
         AuthorizationKey, description='Newly added authorization key.')
+    shop = graphene.Field(Shop, description='Updated Shop')
 
     class Meta:
         description = 'Adds an authorization key.'
@@ -146,12 +147,13 @@ def mutate(cls, root, info, key_type, input):
             return AuthorizationKeyAdd(errors=errors)
 
         instance.save()
-        return AuthorizationKeyAdd(authorization_key=instance)
+        return AuthorizationKeyAdd(authorization_key=instance, shop=Shop())
 
 
 class AuthorizationKeyDelete(BaseMutation):
     authorization_key = graphene.Field(
         AuthorizationKey, description='Auhtorization key that was deleted.')
+    shop = graphene.Field(Shop, description='Updated Shop')
 
     class Arguments:
         key_type = AuthorizationKeyType(
@@ -174,4 +176,4 @@ def mutate(cls, root, info, key_type):
             return AuthorizationKeyDelete(errors=errors)
 
         instance.delete()
-        return AuthorizationKeyDelete(authorization_key=instance)
+        return AuthorizationKeyDelete(authorization_key=instance, shop=Shop())


Test patch:
diff --git a/saleor/static/dashboard-next/storybook/__snapshots__/Stories.test.ts.snap b/saleor/static/dashboard-next/storybook/__snapshots__/Stories.test.ts.snap
--- a/saleor/static/dashboard-next/storybook/__snapshots__/Stories.test.ts.snap
+++ b/saleor/static/dashboard-next/storybook/__snapshots__/Stories.test.ts.snap
@@ -5832,6 +5832,10 @@ exports[`Storyshots Pages / PageProperties when loading 1`] = `
 </div>
 `;
 
+exports[`Storyshots SiteSettings / Add key dialog default 1`] = `<div />`;
+
+exports[`Storyshots SiteSettings / Add key dialog form errors 1`] = `<div />`;
+
 exports[`Storyshots Views / Attributes / Attribute details default 1`] = `
 <div>
   <form>
@@ -11261,7 +11265,7 @@ exports[`Storyshots Views / Configuration default 1`] = `
         </div>
       </div>
       <div
-        class="MuiPaper-root-id MuiPaper-elevation1-id MuiPaper-rounded-id MuiCard-root-id Component-cardDisabled-id"
+        class="MuiPaper-root-id MuiPaper-elevation1-id MuiPaper-rounded-id MuiCard-root-id Component-card-id"
       >
         <div
           class="MuiCardContent-root-id Component-cardContent-id"
@@ -40642,6 +40646,884 @@ exports[`Storyshots Views / Products / Product variant details when loading data
 </div>
 `;
 
+exports[`Storyshots Views / Site settings / Page default 1`] = `
+<div>
+  <form>
+    <div
+      class="Component-md-id"
+    >
+      <div
+        class="Component-root-id"
+      >
+        <h2
+          class="MuiTypography-root-id MuiTypography-title-id PageHeader-title-id"
+        >
+          General Information
+        </h2>
+        <div
+          class="Component-action-id"
+        />
+      </div>
+      <div
+        class="Component-root-id"
+      >
+        <h2
+          class="MuiTypography-root-id MuiTypography-title-id"
+        >
+          Site Settings
+        </h2>
+        <div
+          class="MuiPaper-root-id MuiPaper-elevation1-id MuiPaper-rounded-id MuiCard-root-id"
+        >
+          <div
+            class="Component-root-id"
+          >
+            <span
+              class="MuiTypography-root-id MuiTypography-body1-id Component-title-id"
+            >
+              General Information
+            </span>
+            <div
+              class="Component-toolbar-id"
+            />
+          </div>
+          <div
+            class="Component-children-id"
+          />
+          <hr
+            class="Component-hr-id"
+          />
+          <div
+            class="MuiCardContent-root-id"
+          >
+            <div
+              class="MuiFormControl-root-id MuiFormControl-fullWidth-id"
+            >
+              <label
+                class="MuiFormLabel-root-id MuiFormLabel-filled-id MuiInputLabel-root-id MuiInputLabel-formControl-id MuiInputLabel-animated-id MuiInputLabel-shrink-id"
+                data-shrink="true"
+              >
+                Name of your store
+              </label>
+              <div
+                class="MuiInput-root-id MuiInput-fullWidth-id MuiInput-formControl-id MuiInput-underline-id"
+              >
+                <input
+                  aria-invalid="false"
+                  class="MuiInput-input-id"
+                  name="name"
+                  type="text"
+                  value="Saleor e-commerce"
+                />
+              </div>
+              <p
+                class="MuiFormHelperText-root-id MuiFormHelperText-filled-id"
+              >
+                Name of your store is shown on tab in web browser
+              </p>
+            </div>
+            <div
+              class="Component-spacer-id"
+            />
+            <div
+              class="MuiFormControl-root-id MuiFormControl-fullWidth-id"
+            >
+              <label
+                class="MuiFormLabel-root-id MuiFormLabel-filled-id MuiInputLabel-root-id MuiInputLabel-formControl-id MuiInputLabel-animated-id MuiInputLabel-shrink-id"
+                data-shrink="true"
+              >
+                URL of your online store
+              </label>
+              <div
+                class="MuiInput-root-id MuiInput-fullWidth-id MuiInput-formControl-id MuiInput-underline-id"
+              >
+                <input
+                  aria-invalid="false"
+                  class="MuiInput-input-id"
+                  name="domain"
+                  type="text"
+                  value="localhost:8000"
+                />
+              </div>
+            </div>
+            <div
+              class="Component-spacer-id"
+            />
+            <div
+              class="MuiFormControl-root-id MuiFormControl-fullWidth-id"
+            >
+              <label
+                class="MuiFormLabel-root-id MuiFormLabel-filled-id MuiInputLabel-root-id MuiInputLabel-formControl-id MuiInputLabel-animated-id MuiInputLabel-shrink-id"
+                data-shrink="true"
+              >
+                Store Description
+              </label>
+              <div
+                class="MuiInput-root-id MuiInput-fullWidth-id MuiInput-formControl-id MuiInput-underline-id"
+              >
+                <input
+                  aria-invalid="false"
+                  class="MuiInput-input-id"
+                  name="description"
+                  type="text"
+                  value="Lorem ipsum dolor sit amet"
+                />
+              </div>
+              <p
+                class="MuiFormHelperText-root-id MuiFormHelperText-filled-id"
+              >
+                Store description is shown on taskbar after your store name
+              </p>
+            </div>
+          </div>
+        </div>
+        <h2
+          class="MuiTypography-root-id MuiTypography-title-id"
+        >
+          Authentication keys
+        </h2>
+        <div
+          class="MuiPaper-root-id MuiPaper-elevation1-id MuiPaper-rounded-id MuiCard-root-id"
+        >
+          <div
+            class="Component-root-id"
+          >
+            <span
+              class="MuiTypography-root-id MuiTypography-body1-id Component-title-id"
+            >
+              Authentication Keys
+            </span>
+            <div
+              class="Component-toolbar-id"
+            >
+              <button
+                class="MuiButtonBase-root-id MuiButton-root-id MuiButton-text-id MuiButton-textSecondary-id MuiButton-flat-id MuiButton-flatSecondary-id"
+                tabindex="0"
+                type="button"
+              >
+                <span
+                  class="MuiButton-label-id"
+                >
+                  Add key
+                </span>
+                <span
+                  class="MuiTouchRipple-root-id"
+                />
+              </button>
+            </div>
+          </div>
+          <div
+            class="Component-children-id"
+          />
+          <hr
+            class="Component-hr-id"
+          />
+          <table
+            class="MuiTable-root-id"
+            padding="default"
+          >
+            <thead
+              class="MuiTableHead-root-id"
+            >
+              <tr
+                class="MuiTableRow-root-id MuiTableRow-head-id"
+              >
+                <th
+                  class="MuiTableCell-root-id MuiTableCell-head-id"
+                  scope="col"
+                >
+                  Authentication Type
+                </th>
+                <th
+                  class="MuiTableCell-root-id MuiTableCell-head-id"
+                  scope="col"
+                >
+                  Key
+                </th>
+                <th
+                  class="MuiTableCell-root-id MuiTableCell-head-id"
+                  scope="col"
+                />
+              </tr>
+            </thead>
+            <tbody
+              class="MuiTableBody-root-id"
+            >
+              <tr
+                class="MuiTableRow-root-id MuiTableRow-hover-id"
+              >
+                <td
+                  class="MuiTableCell-root-id MuiTableCell-body-id"
+                >
+                  Facebook
+                </td>
+                <td
+                  class="MuiTableCell-root-id MuiTableCell-body-id"
+                >
+                  n1n62jkn2123:123n
+                </td>
+                <td
+                  class="MuiTableCell-root-id MuiTableCell-body-id Component-iconCell-id"
+                >
+                  <button
+                    class="MuiButtonBase-root-id MuiIconButton-root-id"
+                    tabindex="0"
+                    type="button"
+                  >
+                    <span
+                      class="MuiIconButton-label-id"
+                    >
+                      <svg
+                        aria-hidden="true"
+                        class="MuiSvgIcon-root-id MuiSvgIcon-colorSecondary-id"
+                        focusable="false"
+                        viewBox="0 0 24 24"
+                      >
+                        <g>
+                          <path
+                            d="M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z"
+                          />
+                        </g>
+                      </svg>
+                    </span>
+                    <span
+                      class="MuiTouchRipple-root-id"
+                    />
+                  </button>
+                </td>
+              </tr>
+            </tbody>
+          </table>
+        </div>
+      </div>
+      <div
+        class="Component-root-id"
+      >
+        <div
+          class="Component-spacer-id"
+        />
+        <button
+          class="MuiButtonBase-root-id MuiButton-root-id MuiButton-text-id MuiButton-flat-id Component-cancelButton-id"
+          tabindex="0"
+          type="button"
+        >
+          <span
+            class="MuiButton-label-id"
+          >
+            Cancel
+          </span>
+          <span
+            class="MuiTouchRipple-root-id"
+          />
+        </button>
+        <button
+          class="MuiButtonBase-root-id MuiButtonBase-disabled-id MuiButton-root-id MuiButton-contained-id MuiButton-containedSecondary-id MuiButton-raised-id MuiButton-raisedSecondary-id MuiButton-disabled-id"
+          disabled=""
+          tabindex="-1"
+          type="button"
+        >
+          <span
+            class="MuiButton-label-id"
+          >
+            Save
+          </span>
+        </button>
+      </div>
+    </div>
+  </form>
+</div>
+`;
+
+exports[`Storyshots Views / Site settings / Page form errors 1`] = `
+<div>
+  <form>
+    <div
+      class="Component-md-id"
+    >
+      <div
+        class="Component-root-id"
+      >
+        <h2
+          class="MuiTypography-root-id MuiTypography-title-id PageHeader-title-id"
+        >
+          General Information
+        </h2>
+        <div
+          class="Component-action-id"
+        />
+      </div>
+      <div
+        class="Component-root-id"
+      >
+        <h2
+          class="MuiTypography-root-id MuiTypography-title-id"
+        >
+          Site Settings
+        </h2>
+        <div
+          class="MuiPaper-root-id MuiPaper-elevation1-id MuiPaper-rounded-id MuiCard-root-id"
+        >
+          <div
+            class="Component-root-id"
+          >
+            <span
+              class="MuiTypography-root-id MuiTypography-body1-id Component-title-id"
+            >
+              General Information
+            </span>
+            <div
+              class="Component-toolbar-id"
+            />
+          </div>
+          <div
+            class="Component-children-id"
+          />
+          <hr
+            class="Component-hr-id"
+          />
+          <div
+            class="MuiCardContent-root-id"
+          >
+            <div
+              class="MuiFormControl-root-id MuiFormControl-fullWidth-id"
+            >
+              <label
+                class="MuiFormLabel-root-id MuiFormLabel-error-id MuiFormLabel-filled-id MuiInputLabel-root-id MuiInputLabel-formControl-id MuiInputLabel-animated-id MuiInputLabel-shrink-id"
+                data-shrink="true"
+              >
+                Name of your store
+              </label>
+              <div
+                class="MuiInput-root-id MuiInput-error-id MuiInput-fullWidth-id MuiInput-formControl-id MuiInput-underline-id"
+              >
+                <input
+                  aria-invalid="true"
+                  class="MuiInput-input-id"
+                  name="name"
+                  type="text"
+                  value="Saleor e-commerce"
+                />
+              </div>
+              <p
+                class="MuiFormHelperText-root-id MuiFormHelperText-error-id MuiFormHelperText-filled-id"
+              >
+                Generic form error
+              </p>
+            </div>
+            <div
+              class="Component-spacer-id"
+            />
+            <div
+              class="MuiFormControl-root-id MuiFormControl-fullWidth-id"
+            >
+              <label
+                class="MuiFormLabel-root-id MuiFormLabel-error-id MuiFormLabel-filled-id MuiInputLabel-root-id MuiInputLabel-formControl-id MuiInputLabel-animated-id MuiInputLabel-shrink-id"
+                data-shrink="true"
+              >
+                URL of your online store
+              </label>
+              <div
+                class="MuiInput-root-id MuiInput-error-id MuiInput-fullWidth-id MuiInput-formControl-id MuiInput-underline-id"
+              >
+                <input
+                  aria-invalid="true"
+                  class="MuiInput-input-id"
+                  name="domain"
+                  type="text"
+                  value="localhost:8000"
+                />
+              </div>
+              <p
+                class="MuiFormHelperText-root-id MuiFormHelperText-error-id MuiFormHelperText-filled-id"
+              >
+                Generic form error
+              </p>
+            </div>
+            <div
+              class="Component-spacer-id"
+            />
+            <div
+              class="MuiFormControl-root-id MuiFormControl-fullWidth-id"
+            >
+              <label
+                class="MuiFormLabel-root-id MuiFormLabel-error-id MuiFormLabel-filled-id MuiInputLabel-root-id MuiInputLabel-formControl-id MuiInputLabel-animated-id MuiInputLabel-shrink-id"
+                data-shrink="true"
+              >
+                Store Description
+              </label>
+              <div
+                class="MuiInput-root-id MuiInput-error-id MuiInput-fullWidth-id MuiInput-formControl-id MuiInput-underline-id"
+              >
+                <input
+                  aria-invalid="true"
+                  class="MuiInput-input-id"
+                  name="description"
+                  type="text"
+                  value="Lorem ipsum dolor sit amet"
+                />
+              </div>
+              <p
+                class="MuiFormHelperText-root-id MuiFormHelperText-error-id MuiFormHelperText-filled-id"
+              >
+                Generic form error
+              </p>
+            </div>
+          </div>
+        </div>
+        <h2
+          class="MuiTypography-root-id MuiTypography-title-id"
+        >
+          Authentication keys
+        </h2>
+        <div
+          class="MuiPaper-root-id MuiPaper-elevation1-id MuiPaper-rounded-id MuiCard-root-id"
+        >
+          <div
+            class="Component-root-id"
+          >
+            <span
+              class="MuiTypography-root-id MuiTypography-body1-id Component-title-id"
+            >
+              Authentication Keys
+            </span>
+            <div
+              class="Component-toolbar-id"
+            >
+              <button
+                class="MuiButtonBase-root-id MuiButton-root-id MuiButton-text-id MuiButton-textSecondary-id MuiButton-flat-id MuiButton-flatSecondary-id"
+                tabindex="0"
+                type="button"
+              >
+                <span
+                  class="MuiButton-label-id"
+                >
+                  Add key
+                </span>
+                <span
+                  class="MuiTouchRipple-root-id"
+                />
+              </button>
+            </div>
+          </div>
+          <div
+            class="Component-children-id"
+          />
+          <hr
+            class="Component-hr-id"
+          />
+          <table
+            class="MuiTable-root-id"
+            padding="default"
+          >
+            <thead
+              class="MuiTableHead-root-id"
+            >
+              <tr
+                class="MuiTableRow-root-id MuiTableRow-head-id"
+              >
+                <th
+                  class="MuiTableCell-root-id MuiTableCell-head-id"
+                  scope="col"
+                >
+                  Authentication Type
+                </th>
+                <th
+                  class="MuiTableCell-root-id MuiTableCell-head-id"
+                  scope="col"
+                >
+                  Key
+                </th>
+                <th
+                  class="MuiTableCell-root-id MuiTableCell-head-id"
+                  scope="col"
+                />
+              </tr>
+            </thead>
+            <tbody
+              class="MuiTableBody-root-id"
+            >
+              <tr
+                class="MuiTableRow-root-id MuiTableRow-hover-id"
+              >
+                <td
+                  class="MuiTableCell-root-id MuiTableCell-body-id"
+                >
+                  Facebook
+                </td>
+                <td
+                  class="MuiTableCell-root-id MuiTableCell-body-id"
+                >
+                  n1n62jkn2123:123n
+                </td>
+                <td
+                  class="MuiTableCell-root-id MuiTableCell-body-id Component-iconCell-id"
+                >
+                  <button
+                    class="MuiButtonBase-root-id MuiIconButton-root-id"
+                    tabindex="0"
+                    type="button"
+                  >
+                    <span
+                      class="MuiIconButton-label-id"
+                    >
+                      <svg
+                        aria-hidden="true"
+                        class="MuiSvgIcon-root-id MuiSvgIcon-colorSecondary-id"
+                        focusable="false"
+                        viewBox="0 0 24 24"
+                      >
+                        <g>
+                          <path
+                            d="M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z"
+                          />
+                        </g>
+                      </svg>
+                    </span>
+                    <span
+                      class="MuiTouchRipple-root-id"
+                    />
+                  </button>
+                </td>
+              </tr>
+            </tbody>
+          </table>
+        </div>
+      </div>
+      <div
+        class="Component-root-id"
+      >
+        <div
+          class="Component-spacer-id"
+        />
+        <button
+          class="MuiButtonBase-root-id MuiButton-root-id MuiButton-text-id MuiButton-flat-id Component-cancelButton-id"
+          tabindex="0"
+          type="button"
+        >
+          <span
+            class="MuiButton-label-id"
+          >
+            Cancel
+          </span>
+          <span
+            class="MuiTouchRipple-root-id"
+          />
+        </button>
+        <button
+          class="MuiButtonBase-root-id MuiButtonBase-disabled-id MuiButton-root-id MuiButton-contained-id MuiButton-containedSecondary-id MuiButton-raised-id MuiButton-raisedSecondary-id MuiButton-disabled-id"
+          disabled=""
+          tabindex="-1"
+          type="button"
+        >
+          <span
+            class="MuiButton-label-id"
+          >
+            Save
+          </span>
+        </button>
+      </div>
+    </div>
+  </form>
+</div>
+`;
+
+exports[`Storyshots Views / Site settings / Page loading 1`] = `
+<div>
+  <form>
+    <div
+      class="Component-md-id"
+    >
+      <div
+        class="Component-root-id"
+      >
+        <h2
+          class="MuiTypography-root-id MuiTypography-title-id PageHeader-title-id"
+        >
+          General Information
+        </h2>
+        <div
+          class="Component-action-id"
+        />
+      </div>
+      <div
+        class="Component-root-id"
+      >
+        <h2
+          class="MuiTypography-root-id MuiTypography-title-id"
+        >
+          Site Settings
+        </h2>
+        <div
+          class="MuiPaper-root-id MuiPaper-elevation1-id MuiPaper-rounded-id MuiCard-root-id"
+        >
+          <div
+            class="Component-root-id"
+          >
+            <span
+              class="MuiTypography-root-id MuiTypography-body1-id Component-title-id"
+            >
+              General Information
+            </span>
+            <div
+              class="Component-toolbar-id"
+            />
+          </div>
+          <div
+            class="Component-children-id"
+          />
+          <hr
+            class="Component-hr-id"
+          />
+          <div
+            class="MuiCardContent-root-id"
+          >
+            <div
+              class="MuiFormControl-root-id MuiFormControl-fullWidth-id"
+            >
+              <label
+                class="MuiFormLabel-root-id MuiInputLabel-root-id MuiInputLabel-formControl-id MuiInputLabel-animated-id"
+                data-shrink="false"
+              >
+                Name of your store
+              </label>
+              <div
+                class="MuiInput-root-id MuiInput-disabled-id MuiInput-fullWidth-id MuiInput-formControl-id MuiInput-underline-id"
+              >
+                <input
+                  aria-invalid="false"
+                  class="MuiInput-input-id MuiInput-disabled-id"
+                  disabled=""
+                  name="name"
+                  type="text"
+                  value=""
+                />
+              </div>
+              <p
+                class="MuiFormHelperText-root-id"
+              >
+                Name of your store is shown on tab in web browser
+              </p>
+            </div>
+            <div
+              class="Component-spacer-id"
+            />
+            <div
+              class="MuiFormControl-root-id MuiFormControl-fullWidth-id"
+            >
+              <label
+                class="MuiFormLabel-root-id MuiInputLabel-root-id MuiInputLabel-formControl-id MuiInputLabel-animated-id"
+                data-shrink="false"
+              >
+                URL of your online store
+              </label>
+              <div
+                class="MuiInput-root-id MuiInput-disabled-id MuiInput-fullWidth-id MuiInput-formControl-id MuiInput-underline-id"
+              >
+                <input
+                  aria-invalid="false"
+                  class="MuiInput-input-id MuiInput-disabled-id"
+                  disabled=""
+                  name="domain"
+                  type="text"
+                  value=""
+                />
+              </div>
+            </div>
+            <div
+              class="Component-spacer-id"
+            />
+            <div
+              class="MuiFormControl-root-id MuiFormControl-fullWidth-id"
+            >
+              <label
+                class="MuiFormLabel-root-id MuiInputLabel-root-id MuiInputLabel-formControl-id MuiInputLabel-animated-id"
+                data-shrink="false"
+              >
+                Store Description
+              </label>
+              <div
+                class="MuiInput-root-id MuiInput-disabled-id MuiInput-fullWidth-id MuiInput-formControl-id MuiInput-underline-id"
+              >
+                <input
+                  aria-invalid="false"
+                  class="MuiInput-input-id MuiInput-disabled-id"
+                  disabled=""
+                  name="description"
+                  type="text"
+                  value=""
+                />
+              </div>
+              <p
+                class="MuiFormHelperText-root-id"
+              >
+                Store description is shown on taskbar after your store name
+              </p>
+            </div>
+          </div>
+        </div>
+        <h2
+          class="MuiTypography-root-id MuiTypography-title-id"
+        >
+          Authentication keys
+        </h2>
+        <div
+          class="MuiPaper-root-id MuiPaper-elevation1-id MuiPaper-rounded-id MuiCard-root-id"
+        >
+          <div
+            class="Component-root-id"
+          >
+            <span
+              class="MuiTypography-root-id MuiTypography-body1-id Component-title-id"
+            >
+              Authentication Keys
+            </span>
+            <div
+              class="Component-toolbar-id"
+            >
+              <button
+                class="MuiButtonBase-root-id MuiButtonBase-disabled-id MuiButton-root-id MuiButton-text-id MuiButton-textSecondary-id MuiButton-flat-id MuiButton-flatSecondary-id MuiButton-disabled-id"
+                disabled=""
+                tabindex="-1"
+                type="button"
+              >
+                <span
+                  class="MuiButton-label-id"
+                >
+                  Add key
+                </span>
+              </button>
+            </div>
+          </div>
+          <div
+            class="Component-children-id"
+          />
+          <hr
+            class="Component-hr-id"
+          />
+          <table
+            class="MuiTable-root-id"
+            padding="default"
+          >
+            <thead
+              class="MuiTableHead-root-id"
+            >
+              <tr
+                class="MuiTableRow-root-id MuiTableRow-head-id"
+              >
+                <th
+                  class="MuiTableCell-root-id MuiTableCell-head-id"
+                  scope="col"
+                >
+                  Authentication Type
+                </th>
+                <th
+                  class="MuiTableCell-root-id MuiTableCell-head-id"
+                  scope="col"
+                >
+                  Key
+                </th>
+                <th
+                  class="MuiTableCell-root-id MuiTableCell-head-id"
+                  scope="col"
+                />
+              </tr>
+            </thead>
+            <tbody
+              class="MuiTableBody-root-id"
+            >
+              <tr
+                class="MuiTableRow-root-id"
+              >
+                <td
+                  class="MuiTableCell-root-id MuiTableCell-body-id"
+                >
+                  <span
+                    class="Skeleton-skeleton-id"
+                  >
+                    ‌
+                  </span>
+                </td>
+                <td
+                  class="MuiTableCell-root-id MuiTableCell-body-id"
+                >
+                  <span
+                    class="Skeleton-skeleton-id"
+                  >
+                    ‌
+                  </span>
+                </td>
+                <td
+                  class="MuiTableCell-root-id MuiTableCell-body-id Component-iconCell-id"
+                >
+                  <button
+                    class="MuiButtonBase-root-id MuiIconButton-root-id"
+                    tabindex="0"
+                    type="button"
+                  >
+                    <span
+                      class="MuiIconButton-label-id"
+                    >
+                      <svg
+                        aria-hidden="true"
+                        class="MuiSvgIcon-root-id MuiSvgIcon-colorSecondary-id"
+                        focusable="false"
+                        viewBox="0 0 24 24"
+                      >
+                        <g>
+                          <path
+                            d="M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z"
+                          />
+                        </g>
+                      </svg>
+                    </span>
+                    <span
+                      class="MuiTouchRipple-root-id"
+                    />
+                  </button>
+                </td>
+              </tr>
+            </tbody>
+          </table>
+        </div>
+      </div>
+      <div
+        class="Component-root-id"
+      >
+        <div
+          class="Component-spacer-id"
+        />
+        <button
+          class="MuiButtonBase-root-id MuiButton-root-id MuiButton-text-id MuiButton-flat-id Component-cancelButton-id"
+          tabindex="0"
+          type="button"
+        >
+          <span
+            class="MuiButton-label-id"
+          >
+            Cancel
+          </span>
+          <span
+            class="MuiTouchRipple-root-id"
+          />
+        </button>
+        <button
+          class="MuiButtonBase-root-id MuiButtonBase-disabled-id MuiButton-root-id MuiButton-contained-id MuiButton-containedSecondary-id MuiButton-raised-id MuiButton-raisedSecondary-id MuiButton-disabled-id"
+          disabled=""
+          tabindex="-1"
+          type="button"
+        >
+          <span
+            class="MuiButton-label-id"
+          >
+            Save
+          </span>
+        </button>
+      </div>
+    </div>
+  </form>
+</div>
+`;
+
 exports[`Storyshots Views / Staff / Staff member details default 1`] = `
 <div>
   <form>