]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-10397 Test for buckets
authorPascal Mugnier <pascal.mugnier@sonarsource.com>
Wed, 7 Mar 2018 13:26:27 +0000 (14:26 +0100)
committerPascal Mugnier <pascal.mugnier@sonarsource.com>
Wed, 7 Mar 2018 13:26:27 +0000 (14:26 +0100)
server/sonar-web/src/main/js/apps/code/bucket.ts
server/sonar-web/src/main/js/apps/code/components/__tests__/buckets-test.tsx [new file with mode: 0644]
server/sonar-web/src/main/js/components/workspace/models/items.js
server/sonar-web/src/main/js/helpers/storage.ts

index 503b56e30e8b7570273abe9d5b51190f51a2fd78..7431dc36efaaa4305cac467812ca9859d24503f4 100644 (file)
@@ -46,7 +46,7 @@ export function addComponentChildren(
 ): void {
   const previous = getComponentChildren(componentKey);
   if (previous) {
-    children = concat(children, previous.children);
+    children = concat(previous.children, children);
   }
   childrenBucket[componentKey] = { children, total, page };
 }
diff --git a/server/sonar-web/src/main/js/apps/code/components/__tests__/buckets-test.tsx b/server/sonar-web/src/main/js/apps/code/components/__tests__/buckets-test.tsx
new file mode 100644 (file)
index 0000000..49334c2
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2018 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+import { concat } from 'lodash';
+import { Component } from '../../types';
+import {
+  addComponent,
+  getComponent,
+  addComponentChildren,
+  getComponentChildren
+} from '../../bucket';
+
+const component: Component = { key: 'frodo', name: 'frodo', qualifier: 'frodo' };
+
+const componentKey: string = 'foo';
+const childrenA: Component[] = [
+  { key: 'foo', name: 'foo', qualifier: 'foo' },
+  { key: 'bar', name: 'bar', qualifier: 'bar' }
+];
+const childrenB: Component[] = [
+  { key: 'bart', name: 'bart', qualifier: 'bart' },
+  { key: 'simpson', name: 'simpson', qualifier: 'simpson' }
+];
+
+it('Should have empty bucket at start', () => {
+  expect(getComponent(component.key)).toBeUndefined();
+});
+
+it('Should be able to store components in a bucket', () => {
+  addComponent(component);
+  expect(getComponent(component.key)).toEqual(component);
+});
+
+it('Should have empty children bucket at start', () => {
+  expect(getComponentChildren(componentKey)).toBeUndefined();
+});
+
+it('Should be able to store children components in a bucket', () => {
+  addComponentChildren(componentKey, childrenA, childrenA.length, 1);
+  expect(getComponentChildren(componentKey).children).toEqual(childrenA);
+});
+
+it('Should append new children components at the end of the bucket', () => {
+  addComponentChildren(componentKey, childrenB, 4, 2);
+  const finalBucket = getComponentChildren(componentKey);
+  expect(finalBucket.children).toEqual(concat(childrenA, childrenB));
+  expect(finalBucket.total).toBe(4);
+  expect(finalBucket.page).toBe(2);
+});
index c191ca98a9093ac8fe53610b7b07298dfa3760ce..0b1c4c3adf1772b4dfd0b373a04d00c3aa701df0 100644 (file)
@@ -19,6 +19,7 @@
  */
 import Backbone from 'backbone';
 import Item from './item';
+import { saveWorkspace, getWorkspace } from '../../../helpers/storage';
 
 const STORAGE_KEY = 'sonarqube-workspace';
 
@@ -31,11 +32,11 @@ export default Backbone.Collection.extend({
 
   save() {
     const dump = JSON.stringify(this.toJSON());
-    window.localStorage.setItem(STORAGE_KEY, dump);
+    saveWorkspace(dump);
   },
 
   load() {
-    const dump = window.localStorage.getItem(STORAGE_KEY);
+    const dump = getWorkspace(STORAGE_KEY);
     if (dump != null) {
       try {
         const parsed = JSON.parse(dump);
index fc54899c8b490393b989585b778fade9f278ce1b..37533dbdfaafeeae2502f406b2b63057f5b9a4ae 100644 (file)
@@ -28,6 +28,8 @@ const PROJECTS_SORT = 'sonarqube.projects.sort';
 const PROJECT_ACTIVITY_GRAPH = 'sonarqube.project_activity.graph';
 const PROJECT_ACTIVITY_GRAPH_CUSTOM = 'sonarqube.project_activity.graph.custom';
 
+const WORKSPACE = 'sonarqube-workspace';
+
 function save(key: string, value?: string): void {
   try {
     if (value) {
@@ -41,6 +43,14 @@ function save(key: string, value?: string): void {
   }
 }
 
+export function saveWorkspace(dump: string): void {
+  window.localStorage.setItem(WORKSPACE, dump);
+}
+
+export function getWorkspace(): string | null {
+  return window.localStorage.getItem(WORKSPACE);
+}
+
 export function saveFavorite(): void {
   save(PROJECTS_DEFAULT_FILTER, PROJECTS_FAVORITE);
 }