'use strict'; var fs = require('fs'); var path = require('path'); var root = path.resolve(__dirname, '..'); var passed = 0; function read(file) { return fs.readFileSync(path.join(root, file), 'utf8'); } function json(file) { return JSON.parse(read(file)); } function assert(condition, message) { if (!condition) { throw new Error(message); } passed++; } var packageJson = json('package.json'); var solution = json('config/package-solution.json').solution; var config = json('config/config.json'); var copyAssets = json('config/copy-assets.json'); var manifest = json('src/webparts/portalSettings/PortalSettingsWebPart.manifest.json'); var styles = read('src/webparts/portalSettings/PortalSettings.scss'); var sourceFiles = [ 'src/ui/Dom.ts', 'src/ui/DynamicFormRenderer.ts', 'src/ui/PortalSettingsApp.ts' ].map(read).join('\n'); var dataService = read('src/services/PortalSettingsDataService.ts'); var rootPropertyWriter = dataService.substring( dataService.indexOf('private saveRootProperty'), dataService.indexOf('private findAction') ); assert(packageJson.version === '3.2.7', 'Package-Version ist nicht 3.2.7.'); assert(solution.version === '3.2.7.0', 'Solution-Version ist nicht 3.2.7.0.'); assert(!solution.features, 'Das inkompatible Seiten-Provisioning-Feature darf nicht paketiert werden.'); assert(!!config.bundles['portal-settings-web-part'], 'WebPart-Bundle fehlt.'); assert(copyAssets.deployCdnPath === 'temp/deploy', 'Ship-Assets werden nicht nach temp/deploy geschrieben.'); assert(manifest.componentType === 'WebPart', 'Komponente ist kein WebPart.'); assert(!fs.existsSync(path.join(root, 'src/assets/PortalSettings.aspx')), 'Alte ASPX-Seite ist noch vorhanden.'); assert(!fs.existsSync(path.join(root, 'src/extensions/portalSettings/PortalSettingsApplicationCustomizer.ts')), 'Alter Application Customizer ist noch vorhanden.'); assert(sourceFiles.indexOf('innerHTML') < 0, 'UI darf innerHTML nicht verwenden.'); assert(dataService.indexOf('/_api/site/rootweb/UserCustomActions') >= 0 && dataService.indexOf('siteActions.concat(values[1])') >= 0, 'Root-Web-Actions werden nicht für die Provider-Erkennung berücksichtigt.'); assert(dataService.indexOf('body.Sequence = provider.storage.action.sequence') >= 0, 'Bestehende Actions werden nicht auf die Provider-Sequence aktualisiert.'); assert(rootPropertyWriter.indexOf('/_vti_bin/client.svc/ProcessQuery') >= 0 && rootPropertyWriter.indexOf('SetFieldValue') >= 0 && rootPropertyWriter.indexOf('Name="Update"') >= 0 && rootPropertyWriter.indexOf('/_api/web/AllProperties') < 0, 'Root-Web-Properties müssen über den SharePoint-CSOM-Endpunkt gespeichert werden.'); ['themePrimary', 'neutralPrimary', 'neutralLight', 'white'].forEach(function (slot) { assert(styles.indexOf('[theme: ' + slot + ', default:') >= 0, 'Themeslot fehlt: ' + slot); }); assert(packageJson.scripts.package.indexOf('npm test') === 0, 'Paketierung startet nicht mit Tests.'); console.log('PortalSettings static tests passed: ' + passed);