Преглед изворни кода

Fix authority reading and add test case

afc163 пре 7 година
родитељ
комит
0f15cfc9e7
3 измењених фајлова са 31 додато и 25 уклоњено
  1. 12 14
      src/utils/authority.js
  2. 19 0
      src/utils/authority.test.js
  3. 0 11
      src/utils/utils.js

+ 12 - 14
src/utils/authority.js

@@ -1,24 +1,22 @@
-import { isJsonString } from '@/utils/utils';
-
 // use localStorage to store the authority info, which might be sent from server in actual project.
-export function getAuthority() {
+export function getAuthority(str) {
   // return localStorage.getItem('antd-pro-authority') || ['admin', 'user'];
-  const authorityString = localStorage.getItem('antd-pro-authority');
+  const authorityString =
+    typeof str === 'undefined' ? localStorage.getItem('antd-pro-authority') : str;
+  // authorityString could be admin, "admin", ["admin"]
   let authority;
-  if (isJsonString(authorityString)) {
+  try {
     authority = JSON.parse(authorityString);
-  } else {
-    authority = [authorityString];
+  } catch (e) {
+    authority = authorityString;
+  }
+  if (typeof authority === 'string') {
+    return [authority];
   }
   return authority || ['admin'];
 }
 
 export function setAuthority(authority) {
-  let authorityString;
-  if (isJsonString(authority)) {
-    authorityString = JSON.stringify(authority);
-  } else {
-    authorityString = [authority];
-  }
-  return localStorage.setItem('antd-pro-authority', authorityString);
+  const proAuthority = typeof authority === 'string' ? [authority] : authority;
+  return localStorage.setItem('antd-pro-authority', JSON.stringify(proAuthority));
 }

+ 19 - 0
src/utils/authority.test.js

@@ -0,0 +1,19 @@
+import { getAuthority } from './authority';
+
+describe('getAuthority should be strong', () => {
+  it('empty', () => {
+    expect(getAuthority(null)).toEqual(['admin']); // default value
+  });
+  it('string', () => {
+    expect(getAuthority('admin')).toEqual(['admin']);
+  });
+  it('array with double quotes', () => {
+    expect(getAuthority('"admin"')).toEqual(['admin']);
+  });
+  it('array with single item', () => {
+    expect(getAuthority('["admin"]')).toEqual(['admin']);
+  });
+  it('array with multiple items', () => {
+    expect(getAuthority('["admin", "guest"]')).toEqual(['admin', 'guest']);
+  });
+});

+ 0 - 11
src/utils/utils.js

@@ -181,14 +181,3 @@ export function formatWan(val) {
 export function isAntdPro() {
   return window.location.hostname === 'preview.pro.ant.design';
 }
-
-export function isJsonString(str) {
-  try {
-    if (typeof JSON.parse(str) === 'object') {
-      return true;
-    }
-  } catch (e) {
-    return false;
-  }
-  return false;
-}