You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rave.apache.org by er...@apache.org on 2013/03/25 18:00:19 UTC
svn commit: r1460762 [4/4] - in /rave/trunk/rave-portal-resources/src:
main/webapp/static/script/ main/webapp/static/script/core/
main/webapp/static/script/portal/ test/dependencies/ test/javascript/
Added: rave/trunk/rave-portal-resources/src/test/javascript/rave_widget_spec.js
URL: http://svn.apache.org/viewvc/rave/trunk/rave-portal-resources/src/test/javascript/rave_widget_spec.js?rev=1460762&view=auto
==============================================================================
--- rave/trunk/rave-portal-resources/src/test/javascript/rave_widget_spec.js (added)
+++ rave/trunk/rave-portal-resources/src/test/javascript/rave_widget_spec.js Mon Mar 25 17:00:18 2013
@@ -0,0 +1,272 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+describe('rave.RegionWidget', function () {
+
+ var provider,
+ viewObject,
+ validWidget,
+ invalidWidget,
+ errorWidget;
+
+ beforeEach(function () {
+ provider = {
+ init: function () {
+ },
+ initWidget: function () {
+ },
+ renderWidget: function () {
+ },
+ closeWidget: function () {
+ },
+ setDefaultGadgetSize: function () {
+ },
+ setDefaultGadgetView: function () {
+ }
+ }
+ _.each(provider, function (fn, key) {
+ spyOn(provider, key);
+ });
+
+ viewObject = {
+ render: function () {
+ },
+ getWidgetSite: function () {
+ },
+ destroy: function () {
+ }
+ }
+ _.each(viewObject, function (fn, key) {
+ spyOn(viewObject, key);
+ });
+
+ validWidget = {
+ "type": "OpenSocial",
+ "regionWidgetId": "5",
+ "widgetUrl": "http://widgets.nytimes.com/packages/html/igoogle/topstories.xml",
+ "metadata": {
+ "userPrefs": {
+ },
+ "hasPrefsToEdit": true,
+ "views": {
+ "home": {
+ "preferredHeight": 0, "quirks": true, "preferredWidth": 0},
+ "default": {
+ "preferredHeight": 0, "quirks": true, "preferredWidth": 0},
+ "canvas": {
+ "preferredHeight": 0, "quirks": true, "preferredWidth": 0}
+ },
+ "modulePrefs": {
+ }
+ },
+ "userPrefs": { "headlineCount": "9", "summaryCount": "1"},
+ "collapsed": false,
+ "widgetId": "3"
+ };
+
+ invalidWidget = {
+ "type": "OpenSocial",
+ "regionWidgetId": "5",
+ "widgetUrl": "http://widgets.nytimes.com/packages/html/igoogle/topstories.xml",
+ "error": "error text"
+ };
+
+ spyOn(rave, 'getProvider').andReturn(provider);
+ spyOn(rave, 'renderView').andReturn(viewObject);
+ spyOn(rave, 'destroyView');
+
+ _.each(rave.api.rest, function (fn, key) {
+ spyOn(rave.api.rest, key);
+ });
+ _.each(rave.api.rpc, function (fn, key) {
+ spyOn(rave.api.rpc, key);
+ });
+ });
+
+ describe('constructor', function () {
+ it('returns a new object with all the properties of the definition', function () {
+ var regionWidget = new rave.RegionWidget(validWidget);
+ _.each(validWidget, function (value, key) {
+ expect(regionWidget[key]).toEqual(value);
+ });
+ });
+
+ it('throws an error if the expected provider is not registered', function () {
+ rave.getProvider.andReturn(undefined);
+
+ expect(function () {
+ new rave.RegionWidget(validWidget);
+ }).toThrow();
+ });
+
+ it('invokes the initWidget method of the provider', function () {
+ expect(provider.initWidget).not.toHaveBeenCalled();
+ var regionWidget = new rave.RegionWidget(validWidget);
+ expect(provider.initWidget).toHaveBeenCalled();
+ });
+ });
+
+ describe('extend', function () {
+ it('allows you to extend the rave.RegionWidget prototype', function () {
+ var mixin = {
+ fn: function () {
+ },
+ prop: 7
+ }
+
+ spyOn(mixin, 'fn');
+
+ var regionWidget1 = new rave.RegionWidget(validWidget);
+ expect(regionWidget1.fn).toBeUndefined();
+ rave.RegionWidget.extend(mixin);
+ var regionWidget2 = new rave.RegionWidget(validWidget);
+ expect(regionWidget1.prop).toEqual(7);
+ expect(regionWidget2.prop).toEqual(7);
+
+ regionWidget1.fn();
+ regionWidget2.fn();
+ expect(mixin.fn.calls.length).toEqual(2);
+ });
+ });
+
+ describe('prototype', function () {
+ var regionWidget,
+ errorRegionWidget;
+
+ beforeEach(function () {
+ regionWidget = new rave.RegionWidget(validWidget);
+ errorRegionWidget = new rave.RegionWidget(invalidWidget);
+ })
+
+ describe('render', function () {
+ it('renders the errorWidget if the definition has errrors', function () {
+ var el = {};
+ errorRegionWidget.render(el);
+ expect(rave.renderView).toHaveBeenCalledWith('errorWidget', el, errorRegionWidget);
+ expect(provider.renderWidget).not.toHaveBeenCalled();
+ });
+
+ it('retrieves a registered view if el is a string', function () {
+ regionWidget.render('asdf');
+
+ expect(rave.renderView).toHaveBeenCalledWith('asdf', regionWidget);
+ expect(viewObject.getWidgetSite).toHaveBeenCalled();
+ expect(regionWidget._view).toBe(viewObject);
+ });
+
+ it("invokes the provider's renderWidget function", function () {
+ var el = {dom: 'element'};
+ var opts = {opts: true}
+ regionWidget.render(el, opts);
+
+ expect(provider.renderWidget).toHaveBeenCalledWith(regionWidget, el, opts);
+ });
+ });
+
+ describe('hide', function () {
+ it('calls the rave api and updates the widget state', function () {
+ regionWidget.collapsed = 'asdf';
+
+ expect(regionWidget.collapsed).toEqual('asdf');
+ regionWidget.hide();
+ expect(regionWidget.collapsed).toEqual(true);
+ expect(rave.api.rest.saveWidgetCollapsedState).toHaveBeenCalledWith({
+ regionWidgetId: regionWidget.regionWidgetId,
+ collapsed: true
+ });
+ });
+ });
+
+ describe('show', function () {
+ it('calls the rave api and updates the widget state', function () {
+ regionWidget.collapsed = 'asdf';
+
+ expect(regionWidget.collapsed).toEqual('asdf');
+ regionWidget.show();
+ expect(regionWidget.collapsed).toEqual(false);
+ expect(rave.api.rest.saveWidgetCollapsedState).toHaveBeenCalledWith({
+ regionWidgetId: regionWidget.regionWidgetId,
+ collapsed: false
+ });
+ });
+ });
+
+ describe('close', function () {
+ it('invokes closeWidget on provider and calls the rave api', function () {
+ var opts = {opts: true}
+ regionWidget.close(opts);
+
+ expect(rave.destroyView).not.toHaveBeenCalled();
+ expect(provider.closeWidget).toHaveBeenCalledWith(regionWidget, opts);
+ expect(rave.api.rpc.removeWidget).toHaveBeenCalledWith({
+ regionWidgetId: regionWidget.regionWidgetId
+ });
+ });
+
+ it('destroys the associated view', function () {
+ regionWidget.render('asdf');
+
+ expect(regionWidget._view).toBe(viewObject);
+
+ regionWidget.close();
+ expect(rave.destroyView).toHaveBeenCalledWith(viewObject);
+ });
+ });
+
+ describe('moveToPage', function () {
+ it('calls the rave api', function () {
+ var cb = function () {
+ }
+ regionWidget.moveToPage(1, cb);
+
+ expect(rave.api.rpc.moveWidgetToPage).toHaveBeenCalledWith({
+ toPageId: 1,
+ regionWidgetId: regionWidget.regionWidgetId,
+ successCallback: cb
+ });
+ })
+ });
+
+ describe('moveToRegion', function () {
+ it('calls the rave api', function () {
+ regionWidget.moveToRegion(1, 2, 3);
+
+ expect(rave.api.rpc.moveWidgetToRegion).toHaveBeenCalledWith({
+ regionWidgetId: regionWidget.regionWidgetId,
+ fromRegionId: 1,
+ toRegionId: 2,
+ toIndex: 3
+ });
+ });
+ });
+
+ describe('savePreferences', function () {
+ it('calls the rave api updates the widget state', function () {
+ var prefs = {color: 'blue', number: 7}
+ regionWidget.savePreferences(prefs);
+
+ expect(regionWidget.userPrefs).toBe(prefs);
+ expect(rave.api.rest.saveWidgetPreferences).toHaveBeenCalledWith({
+ regionWidgetId: regionWidget.regionWidgetId,
+ userPrefs: prefs
+ });
+ });
+ });
+ });
+});
\ No newline at end of file