Merge branch 'v8/feature/block-editor-list-validation' into v8/feature/block-list-data-structure-v3
# Conflicts: # src/Umbraco.Web.UI.Client/test/unit/common/services/block-editor-service.spec.js
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
angular.module('umbraco.mocks').
|
||||
factory('mocksUtils', ['$cookies', function ($cookies) {
|
||||
factory('mocksUtils', ['$cookies', 'udiService', function ($cookies, udiService) {
|
||||
'use strict';
|
||||
|
||||
//by default we will perform authorization
|
||||
@@ -40,13 +40,17 @@ angular.module('umbraco.mocks').
|
||||
},
|
||||
|
||||
/** Creats a mock content object */
|
||||
getMockContent: function(id) {
|
||||
getMockContent: function (id, key, udi) {
|
||||
key = key || String.CreateGuid();
|
||||
var udi = udi || udiService.build("content", key);
|
||||
var node = {
|
||||
name: "My content with id: " + id,
|
||||
updateDate: new Date().toIsoDateTimeString(),
|
||||
publishDate: new Date().toIsoDateTimeString(),
|
||||
createDate: new Date().toIsoDateTimeString(),
|
||||
id: id,
|
||||
key: key,
|
||||
udi: udi,
|
||||
parentId: 1234,
|
||||
icon: "icon-umb-content",
|
||||
owner: { name: "Administrator", id: 0 },
|
||||
@@ -282,13 +286,17 @@ angular.module('umbraco.mocks').
|
||||
|
||||
|
||||
/** Creats a mock variant content object */
|
||||
getMockVariantContent: function(id) {
|
||||
getMockVariantContent: function(id, key, udi) {
|
||||
key = key || String.CreateGuid();
|
||||
var udi = udi || udiService.build("content", key);
|
||||
var node = {
|
||||
name: "My content with id: " + id,
|
||||
updateDate: new Date().toIsoDateTimeString(),
|
||||
publishDate: new Date().toIsoDateTimeString(),
|
||||
createDate: new Date().toIsoDateTimeString(),
|
||||
id: id,
|
||||
key: key,
|
||||
udi: udi,
|
||||
parentId: 1234,
|
||||
icon: "icon-umb-content",
|
||||
owner: { name: "Administrator", id: 0 },
|
||||
|
||||
@@ -1,12 +1,15 @@
|
||||
describe('blockEditorService tests', function () {
|
||||
|
||||
var key = "6A1F5BDD-67EF-4173-B061-D6348ED07094";
|
||||
var udi = "umb://element/6A1F5BDD67EF4173B061D6348ED07094";
|
||||
|
||||
var blockEditorService, contentResource, $rootScope, $scope;
|
||||
|
||||
beforeEach(module('umbraco.services'));
|
||||
beforeEach(module('umbraco.resources'));
|
||||
beforeEach(module('umbraco.mocks'));
|
||||
beforeEach(module('umbraco'));
|
||||
|
||||
|
||||
beforeEach(inject(function ($injector, mocksUtils, _$rootScope_) {
|
||||
|
||||
mocksUtils.disableAuth();
|
||||
@@ -17,7 +20,7 @@
|
||||
contentResource = $injector.get("contentResource");
|
||||
spyOn(contentResource, "getScaffoldByKey").and.callFake(
|
||||
function () {
|
||||
return Promise.resolve(mocksUtils.getMockVariantContent(1234))
|
||||
return Promise.resolve(mocksUtils.getMockVariantContent(1234, key, udi))
|
||||
}
|
||||
);
|
||||
|
||||
@@ -26,13 +29,13 @@
|
||||
}));
|
||||
|
||||
|
||||
var blockConfigurationMock = { contentTypeKey: "7C5B74D1-E2F9-45A3-AE4B-FC7A829BF8AB", label:"Test label", settingsElementTypeKey: null, view: "testview.html"};
|
||||
var blockConfigurationMock = { contentTypeKey: "7C5B74D1-E2F9-45A3-AE4B-FC7A829BF8AB", label: "Test label", settingsElementTypeKey: null, view: "testview.html" };
|
||||
|
||||
var propertyModelMock = {
|
||||
layout: {
|
||||
"Umbraco.TestBlockEditor": [
|
||||
{
|
||||
udi: 1234
|
||||
udi: udi
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -45,7 +48,7 @@
|
||||
]
|
||||
};
|
||||
|
||||
var blockWithSettingsConfigurationMock = { contentTypeKey: "7C5B74D1-E2F9-45A3-AE4B-FC7A829BF8AB", label:"Test label", settingsElementTypeKey: "7C5B74D1-E2F9-45A3-AE4B-FC7A829BF8AB", view: "testview.html"};
|
||||
var blockWithSettingsConfigurationMock = { contentTypeKey: "7C5B74D1-E2F9-45A3-AE4B-FC7A829BF8AB", label: "Test label", settingsElementTypeKey: "7C5B74D1-E2F9-45A3-AE4B-FC7A829BF8AB", view: "testview.html" };
|
||||
var propertyModelWithSettingsMock = {
|
||||
layout: {
|
||||
"Umbraco.TestBlockEditor": [
|
||||
@@ -57,7 +60,7 @@
|
||||
},
|
||||
contentData: [
|
||||
{
|
||||
udi: 1234,
|
||||
udi: udi,
|
||||
contentTypeKey: "7C5B74D1-E2F9-45A3-AE4B-FC7A829BF8AB",
|
||||
testproperty: "myTestValue"
|
||||
}
|
||||
@@ -72,7 +75,7 @@
|
||||
};
|
||||
|
||||
describe('init blockEditorModelObject', function () {
|
||||
|
||||
|
||||
it('fail if no model value', function () {
|
||||
function createWithNoModelValue() {
|
||||
blockEditorService.createModelObject(null, "Umbraco.TestBlockEditor", [], $scope, $scope);
|
||||
@@ -89,29 +92,29 @@
|
||||
|
||||
it('getBlockConfiguration provide the requested block configurtion', function () {
|
||||
var modelObject = blockEditorService.createModelObject({}, "Umbraco.TestBlockEditor", [blockConfigurationMock], $scope, $scope);
|
||||
|
||||
|
||||
expect(modelObject.getBlockConfiguration(blockConfigurationMock.contentTypeKey).label).toBe(blockConfigurationMock.label);
|
||||
});
|
||||
|
||||
it('load provides data for itemPicker', function (done) {
|
||||
var modelObject = blockEditorService.createModelObject({}, "Umbraco.TestBlockEditor", [blockConfigurationMock], $scope, $scope);
|
||||
|
||||
|
||||
modelObject.load().then(() => {
|
||||
var itemPickerOptions = modelObject.getAvailableBlocksForBlockPicker();
|
||||
expect(itemPickerOptions.length).toBe(1);
|
||||
expect(itemPickerOptions[0].blockConfigModel.contentTypeKey).toBe(blockConfigurationMock.contentTypeKey);
|
||||
done();
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
||||
it('getLayoutEntry has values', function (done) {
|
||||
|
||||
|
||||
|
||||
var modelObject = blockEditorService.createModelObject(propertyModelMock, "Umbraco.TestBlockEditor", [blockConfigurationMock], $scope, $scope);
|
||||
|
||||
|
||||
modelObject.load().then(() => {
|
||||
|
||||
|
||||
var layout = modelObject.getLayout();
|
||||
|
||||
expect(layout).not.toBeUndefined();
|
||||
@@ -121,85 +124,95 @@
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
||||
it('getBlockObject has values', function (done) {
|
||||
|
||||
|
||||
|
||||
var modelObject = blockEditorService.createModelObject(propertyModelMock, "Umbraco.TestBlockEditor", [blockConfigurationMock], $scope, $scope);
|
||||
|
||||
|
||||
modelObject.load().then(() => {
|
||||
|
||||
var layout = modelObject.getLayout();
|
||||
|
||||
var blockObject = modelObject.getBlockObject(layout[0]);
|
||||
try {
|
||||
var layout = modelObject.getLayout();
|
||||
|
||||
expect(blockObject).not.toBeUndefined();
|
||||
expect(blockObject.data.udi).toBe(propertyModelMock.contentData[0].udi);
|
||||
expect(blockObject.content.variants[0].tabs[0].properties[0].value).toBe(propertyModelMock.contentData[0].testproperty);
|
||||
var blockObject = modelObject.getBlockObject(layout[0]);
|
||||
|
||||
done();
|
||||
expect(blockObject).not.toBeUndefined();
|
||||
expect(blockObject.data.udi).toBe(propertyModelMock.contentData[0].udi);
|
||||
expect(blockObject.content.variants[0].tabs[0].properties[0].value).toBe(propertyModelMock.contentData[0].testproperty);
|
||||
|
||||
done();
|
||||
} catch (e) {
|
||||
done.fail(e);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
||||
it('getBlockObject syncs primitive values', function (done) {
|
||||
|
||||
var propertyModel = angular.copy(propertyModelMock);
|
||||
|
||||
var modelObject = blockEditorService.createModelObject(propertyModel, "Umbraco.TestBlockEditor", [blockConfigurationMock], $scope, $scope);
|
||||
|
||||
|
||||
modelObject.load().then(() => {
|
||||
|
||||
var layout = modelObject.getLayout();
|
||||
|
||||
var blockObject = modelObject.getBlockObject(layout[0]);
|
||||
try {
|
||||
var layout = modelObject.getLayout();
|
||||
|
||||
blockObject.content.variants[0].tabs[0].properties[0].value = "anotherTestValue";
|
||||
var blockObject = modelObject.getBlockObject(layout[0]);
|
||||
|
||||
$rootScope.$digest();// invoke angularJS Store.
|
||||
blockObject.content.variants[0].tabs[0].properties[0].value = "anotherTestValue";
|
||||
|
||||
expect(blockObject.data).toEqual(propertyModel.contentData[0]);
|
||||
expect(blockObject.data.testproperty).toBe("anotherTestValue");
|
||||
expect(propertyModel.contentData[0].testproperty).toBe("anotherTestValue");
|
||||
$rootScope.$digest();// invoke angularJS Store.
|
||||
|
||||
//
|
||||
expect(blockObject.data).toEqual(propertyModel.contentData[0]);
|
||||
expect(blockObject.data.testproperty).toBe("anotherTestValue");
|
||||
expect(propertyModel.contentData[0].testproperty).toBe("anotherTestValue");
|
||||
|
||||
done();
|
||||
done();
|
||||
} catch (e) {
|
||||
done.fail(e);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
||||
it('getBlockObject syncs values of object', function (done) {
|
||||
|
||||
var propertyModel = angular.copy(propertyModelMock);
|
||||
|
||||
var complexValue = {"list": ["A", "B", "C"]};
|
||||
var complexValue = { "list": ["A", "B", "C"] };
|
||||
propertyModel.contentData[0].testproperty = complexValue;
|
||||
|
||||
|
||||
var modelObject = blockEditorService.createModelObject(propertyModel, "Umbraco.TestBlockEditor", [blockConfigurationMock], $scope, $scope);
|
||||
|
||||
|
||||
modelObject.load().then(() => {
|
||||
|
||||
var layout = modelObject.getLayout();
|
||||
|
||||
var blockObject = modelObject.getBlockObject(layout[0]);
|
||||
try {
|
||||
var layout = modelObject.getLayout();
|
||||
|
||||
blockObject.content.variants[0].tabs[0].properties[0].value.list[0] = "AA";
|
||||
blockObject.content.variants[0].tabs[0].properties[0].value.list.push("D");
|
||||
var blockObject = modelObject.getBlockObject(layout[0]);
|
||||
|
||||
$rootScope.$digest();// invoke angularJS Store.
|
||||
blockObject.content.variants[0].tabs[0].properties[0].value.list[0] = "AA";
|
||||
blockObject.content.variants[0].tabs[0].properties[0].value.list.push("D");
|
||||
|
||||
expect(propertyModel.contentData[0].testproperty.list[0]).toBe("AA");
|
||||
expect(propertyModel.contentData[0].testproperty.list.length).toBe(4);
|
||||
$rootScope.$digest();// invoke angularJS Store.
|
||||
|
||||
done();
|
||||
expect(propertyModel.contentData[0].testproperty.list[0]).toBe("AA");
|
||||
expect(propertyModel.contentData[0].testproperty.list.length).toBe(4);
|
||||
|
||||
done();
|
||||
} catch (e) {
|
||||
done.fail(e);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
|
||||
it('layout is referencing layout of propertyModel', function (done) {
|
||||
@@ -207,9 +220,9 @@
|
||||
var propertyModel = angular.copy(propertyModelMock);
|
||||
|
||||
var modelObject = blockEditorService.createModelObject(propertyModel, "Umbraco.TestBlockEditor", [blockConfigurationMock], $scope, $scope);
|
||||
|
||||
|
||||
modelObject.load().then(() => {
|
||||
|
||||
|
||||
var layout = modelObject.getLayout();
|
||||
|
||||
// remove from layout;
|
||||
@@ -220,7 +233,7 @@
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
|
||||
it('removeDataAndDestroyModel removes data', function (done) {
|
||||
@@ -228,30 +241,31 @@
|
||||
var propertyModel = angular.copy(propertyModelMock);
|
||||
|
||||
var modelObject = blockEditorService.createModelObject(propertyModel, "Umbraco.TestBlockEditor", [blockConfigurationMock], $scope, $scope);
|
||||
|
||||
|
||||
modelObject.load().then(() => {
|
||||
|
||||
var layout = modelObject.getLayout();
|
||||
|
||||
var blockObject = modelObject.getBlockObject(layout[0]);
|
||||
try {
|
||||
var layout = modelObject.getLayout();
|
||||
|
||||
expect(blockObject).not.toBeUndefined();
|
||||
expect(blockObject).not.toBe(null);
|
||||
var blockObject = modelObject.getBlockObject(layout[0]);
|
||||
|
||||
// remove from layout;
|
||||
layout.splice(0, 1);
|
||||
expect(blockObject).not.toBeUndefined();
|
||||
expect(blockObject).not.toBe(null);
|
||||
|
||||
// remove from data;
|
||||
modelObject.removeDataAndDestroyModel(blockObject);
|
||||
// remove from layout;
|
||||
layout.splice(0, 1);
|
||||
|
||||
expect(propertyModel.contentData.length).toBe(0);
|
||||
expect(propertyModel.contentData[0]).toBeUndefined();
|
||||
expect(propertyModel.layout["Umbraco.TestBlockEditor"].length).toBe(0);
|
||||
expect(propertyModel.layout["Umbraco.TestBlockEditor"][0]).toBeUndefined();
|
||||
// remove from data;
|
||||
modelObject.removeDataAndDestroyModel(blockObject);
|
||||
|
||||
expect(propertyModel.contentData.length).toBe(0);
|
||||
expect(propertyModel.contentData[0]).toBeUndefined();
|
||||
expect(propertyModel.layout["Umbraco.TestBlockEditor"].length).toBe(0);
|
||||
expect(propertyModel.layout["Umbraco.TestBlockEditor"][0]).toBeUndefined();
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
||||
@@ -263,11 +277,11 @@
|
||||
it('getBlockObject of block with settings has values', function (done) {
|
||||
|
||||
var propertyModel = angular.copy(propertyModelWithSettingsMock);
|
||||
|
||||
|
||||
var modelObject = blockEditorService.createModelObject(propertyModel, "Umbraco.TestBlockEditor", [blockWithSettingsConfigurationMock], $scope, $scope);
|
||||
|
||||
|
||||
modelObject.load().then(() => {
|
||||
|
||||
|
||||
var layout = modelObject.getLayout();
|
||||
|
||||
var blockObject = modelObject.getBlockObject(layout[0]);
|
||||
@@ -278,18 +292,18 @@
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
||||
it('getBlockObject of block with settings syncs primative values', function (done) {
|
||||
|
||||
var propertyModel = angular.copy(propertyModelWithSettingsMock);
|
||||
|
||||
var modelObject = blockEditorService.createModelObject(propertyModel, "Umbraco.TestBlockEditor", [blockWithSettingsConfigurationMock], $scope, $scope);
|
||||
|
||||
|
||||
modelObject.load().then(() => {
|
||||
|
||||
|
||||
var layout = modelObject.getLayout();
|
||||
|
||||
var blockObject = modelObject.getBlockObject(layout[0]);
|
||||
@@ -302,7 +316,7 @@
|
||||
expect(blockObject.data).toEqual(propertyModel.contentData[0]);
|
||||
expect(blockObject.data.testproperty).toBe("anotherTestValue");
|
||||
expect(propertyModel.contentData[0].testproperty).toBe("anotherTestValue");
|
||||
|
||||
|
||||
expect(blockObject.settingsData).toEqual(propertyModel.settingsData[0]);
|
||||
expect(blockObject.settingsData.testproperty).toBe("anotherTestValueForSettings");
|
||||
expect(propertyModel.settingsData[0].testproperty).toBe("anotherTestValueForSettings");
|
||||
@@ -311,24 +325,24 @@
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
||||
it('getBlockObject of block with settings syncs values of object', function (done) {
|
||||
|
||||
var propertyModel = angular.copy(propertyModelWithSettingsMock);
|
||||
|
||||
var complexValue = {"list": ["A", "B", "C"]};
|
||||
var complexValue = { "list": ["A", "B", "C"] };
|
||||
propertyModel.contentData[0].testproperty = complexValue;
|
||||
|
||||
var complexSettingsValue = {"list": ["A", "B", "C"]};
|
||||
var complexSettingsValue = { "list": ["A", "B", "C"] };
|
||||
propertyModel.settingsData[0].testproperty = complexSettingsValue;
|
||||
|
||||
var modelObject = blockEditorService.createModelObject(propertyModel, "Umbraco.TestBlockEditor", [blockWithSettingsConfigurationMock], $scope, $scope);
|
||||
|
||||
|
||||
modelObject.load().then(() => {
|
||||
|
||||
|
||||
var layout = modelObject.getLayout();
|
||||
|
||||
var blockObject = modelObject.getBlockObject(layout[0]);
|
||||
@@ -348,11 +362,14 @@
|
||||
expect(propertyModel.settingsData[0].testproperty.list.length).toBe(4);
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
} catch (e) {
|
||||
done.fail(e);
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user