diff options
-rw-r--r-- | Makefile | 41 | ||||
-rw-r--r-- | mattermost.go | 41 | ||||
-rw-r--r-- | webapp/Makefile | 11 | ||||
-rw-r--r-- | webapp/package.json | 2 | ||||
-rw-r--r-- | webapp/tests/client_user.test.jsx | 6 | ||||
-rw-r--r-- | webapp/webpack.config-test.js | 131 | ||||
-rw-r--r-- | webapp/webpack.config.js | 12 |
7 files changed, 87 insertions, 157 deletions
@@ -1,4 +1,4 @@ -.PHONY: build package run stop run-client run-server stop-client stop-server restart-server restart-client start-docker clean-dist clean nuke check-style check-unit-tests test dist setup-mac prepare-enteprise run-client-tests setup-run-client-tests cleanup-run-client-tests test-client build-linux build-osx build-windows +.PHONY: build package run stop run-client run-server stop-client stop-server restart-server restart-client start-docker clean-dist clean nuke check-style check-client-style check-server-style check-unit-tests test dist setup-mac prepare-enteprise run-client-tests setup-run-client-tests cleanup-run-client-tests test-client build-linux build-osx build-windows internal-test-client # For golang 1.5.x compatibility (remove when we don't want to support it anymore) export GO15VENDOREXPERIMENT=1 @@ -132,7 +132,12 @@ clean-docker: docker rm -v mattermost-openldap > /dev/null; \ fi -check-style: +check-client-style: + @echo Checking client style + + cd $(BUILD_WEBAPP_DIR) && $(MAKE) check-style + +check-server-style: @echo Running GOFMT $(eval GOFMT_OUTPUT := $(shell gofmt -d -s api/ model/ store/ utils/ manualtesting/ einterfaces/ mattermost.go 2>&1)) @echo "$(GOFMT_OUTPUT)" @@ -143,14 +148,16 @@ check-style: exit 1; \ fi -test: prepare-enteprise start-docker - @echo Running tests +check-style: check-client-style check-server-style + +test-server: start-docker prepare-enterprise + @echo Running server tests - #$(GO) test $(GOFLAGS) -run=$(TESTS) -test.v -test.timeout=340s ./api || exit 1 - #$(GO) test $(GOFLAGS) -run=$(TESTS) -test.v -test.timeout=12s ./model || exit 1 - #$(GO) test $(GOFLAGS) -run=$(TESTS) -test.v -test.timeout=180s ./store || exit 1 - #$(GO) test $(GOFLAGS) -run=$(TESTS) -test.v -test.timeout=120s ./utils || exit 1 - #$(GO) test $(GOFLAGS) -run=$(TESTS) -test.v -test.timeout=120s ./web || exit 1 + $(GO) test $(GOFLAGS) -run=$(TESTS) -test.v -test.timeout=340s ./api || exit 1 + $(GO) test $(GOFLAGS) -run=$(TESTS) -test.v -test.timeout=12s ./model || exit 1 + $(GO) test $(GOFLAGS) -run=$(TESTS) -test.v -test.timeout=180s ./store || exit 1 + $(GO) test $(GOFLAGS) -run=$(TESTS) -test.v -test.timeout=120s ./utils || exit 1 + $(GO) test $(GOFLAGS) -run=$(TESTS) -test.v -test.timeout=120s ./web || exit 1 ifeq ($(BUILD_ENTERPRISE_READY),true) @echo Running Enterprise tests $(GO) test $(GOFLAGS) -run=$(TESTS) -c ./enterprise/ldap && ./ldap.test -test.v -test.timeout=120s || exit 1 @@ -159,19 +166,15 @@ ifeq ($(BUILD_ENTERPRISE_READY),true) rm -r compliance.test endif -setup-run-client-tests: - sed -i'.bak' 's|"EnableOpenServer": false,|"EnableOpenServer": true,|g' config/config.json +internal-test-client: start-docker prepare-enterprise + $(GO) run $(GOFLAGS) *.go -run_client_tests -cleanup-run-client-tests: - sed -i'.bak' 's|"EnableOpenServer": true,|"EnableOpenServer": false,|g' config/config.json +test-client: start-docker prepare-enterprise + @echo Running client tests -run-client-tests: cd $(BUILD_WEBAPP_DIR) && $(MAKE) test - sleep 10 - @echo Running client side unit tests - cd $(BUILD_WEBAPP_DIR) && npm test -test-client: setup-run-client-tests run-server run-client-tests stop-server cleanup-run-client-tests +test: test-server test-client .prebuild: @echo Preparation for running go code @@ -323,6 +326,8 @@ clean: stop-docker rm -rf logs rm -f mattermost.log + rm -f npm-debug.log + rm -f api/mattermost.log rm -f .prepare-go rm -f enterprise diff --git a/mattermost.go b/mattermost.go index 6fe285d58..5bff01dee 100644 --- a/mattermost.go +++ b/mattermost.go @@ -4,6 +4,7 @@ package main import ( + "bufio" "flag" "fmt" "html/template" @@ -11,6 +12,7 @@ import ( "net/http" "net/url" "os" + "os/exec" "os/signal" "runtime" "strconv" @@ -44,6 +46,7 @@ var flagCmdCreateUser bool var flagCmdAssignRole bool var flagCmdJoinTeam bool var flagCmdVersion bool +var flagCmdRunClientTests bool var flagCmdResetPassword bool var flagCmdResetMfa bool var flagCmdPermanentDeleteUser bool @@ -260,6 +263,7 @@ func parseCmds() { flag.BoolVar(&flagCmdAssignRole, "assign_role", false, "") flag.BoolVar(&flagCmdJoinTeam, "join_team", false, "") flag.BoolVar(&flagCmdVersion, "version", false, "") + flag.BoolVar(&flagCmdRunClientTests, "run_client_tests", false, "") flag.BoolVar(&flagCmdResetPassword, "reset_password", false, "") flag.BoolVar(&flagCmdResetMfa, "reset_mfa", false, "") flag.BoolVar(&flagCmdPermanentDeleteUser, "permanent_delete_user", false, "") @@ -277,6 +281,7 @@ func parseCmds() { flagCmdResetPassword || flagCmdResetMfa || flagCmdVersion || + flagCmdRunClientTests || flagCmdPermanentDeleteUser || flagCmdPermanentDeleteTeam || flagCmdPermanentDeleteAllUsers || @@ -286,6 +291,7 @@ func parseCmds() { func runCmds() { cmdVersion() + cmdRunClientTests() cmdCreateTeam() cmdCreateUser() cmdAssignRole() @@ -304,6 +310,41 @@ type TeamForUpgrade struct { Name string } +func setupClientTests() { + *utils.Cfg.TeamSettings.EnableOpenServer = true +} + +func runClientTests() { + os.Chdir("webapp") + cmd := exec.Command("npm", "test") + cmdOutPipe, err := cmd.StdoutPipe() + if err != nil { + l4g.Error("Failed to run tests") + os.Exit(1) + } + + cmdOutReader := bufio.NewScanner(cmdOutPipe) + go func() { + for cmdOutReader.Scan() { + fmt.Println(cmdOutReader.Text()) + } + }() + + if err := cmd.Run(); err != nil { + l4g.Error("Client Tests failed") + os.Exit(1) + } +} + +func cmdRunClientTests() { + if flagCmdRunClientTests { + setupClientTests() + api.StartServer() + runClientTests() + api.StopServer() + } +} + // ADDED for 3.0 REMOVE for 3.4 func cmdUpdateDb30() { if flagCmdUpdateDb30 { diff --git a/webapp/Makefile b/webapp/Makefile index b0c2c831a..48172273f 100644 --- a/webapp/Makefile +++ b/webapp/Makefile @@ -1,10 +1,15 @@ -.PHONY: build test run clean stop +.PHONY: build test run clean stop check-style run-unit -test: .npminstall +BUILD_SERVER_DIR = .. + +check-style: .npminstall @echo Checking for style guide compliance npm run check +test: .npminstall + cd $(BUILD_SERVER_DIR) && $(MAKE) internal-test-client + .npminstall: package.json @echo Getting dependencies using npm @@ -12,7 +17,7 @@ test: .npminstall touch $@ -build: | .npminstall test +build: .npminstall @echo Building mattermost Webapp npm run build diff --git a/webapp/package.json b/webapp/package.json index 81f868baa..505114b0b 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -70,6 +70,6 @@ "build": "NODE_ENV=production webpack", "run": "NODE_ENV=production webpack --progress --watch", "run-fullmap": "webpack --progress --watch", - "test": "mocha-webpack --webpack-config webpack.config-test.js \"**/*.test.jsx\"" + "test": "mocha-webpack --webpack-config webpack.config.js \"**/*.test.jsx\"" } } diff --git a/webapp/tests/client_user.test.jsx b/webapp/tests/client_user.test.jsx index 9dc875e9d..b4f10be12 100644 --- a/webapp/tests/client_user.test.jsx +++ b/webapp/tests/client_user.test.jsx @@ -321,8 +321,7 @@ describe('Client.User', function() { function() { throw Error('shouldnt work'); }, - function(err) { - assert.equal(err.id, 'ent.ldap.do_login.licence_disable.app_error'); + function() { done(); } ); @@ -547,8 +546,7 @@ describe('Client.User', function() { function() { done(new Error('not enabled')); }, - function(err) { - assert.equal(err.id, 'ent.mfa.license_disable.app_error'); + function() { done(); } ); diff --git a/webapp/webpack.config-test.js b/webapp/webpack.config-test.js deleted file mode 100644 index aaeefeb8c..000000000 --- a/webapp/webpack.config-test.js +++ /dev/null @@ -1,131 +0,0 @@ -const webpack = require('webpack'); -const path = require('path'); -const ExtractTextPlugin = require('extract-text-webpack-plugin'); -const CopyWebpackPlugin = require('copy-webpack-plugin'); -const nodeExternals = require('webpack-node-externals'); - -const htmlExtract = new ExtractTextPlugin('html', 'root.html'); - -const NPM_TARGET = process.env.npm_lifecycle_event; //eslint-disable-line no-process-env - -var DEV = true; -var FULLMAP = false; -if (NPM_TARGET === 'run' || NPM_TARGET === 'run-fullmap') { - DEV = true; - if (NPM_TARGET === 'run-fullmap') { - FULLMAP = true; - } -} - -var config = { - target: 'node', - externals: [nodeExternals()], - module: { - loaders: [ - { - test: /\.jsx?$/, - loader: 'babel', - exclude: /(node_modules|non_npm_dependencies)/, - query: { - presets: ['react', 'es2015-webpack', 'stage-0'], - plugins: ['transform-runtime'], - cacheDirectory: DEV - } - }, - { - test: /\.json$/, - loader: 'json' - }, - { - test: /(node_modules|non_npm_dependencies)\/.+\.(js|jsx)$/, - loader: 'imports', - query: { - $: 'jquery', - jQuery: 'jquery' - } - }, - { - test: /\.scss$/, - loaders: ['style', 'css', 'sass'] - }, - { - test: /\.css$/, - loaders: ['style', 'css'] - }, - { - test: /\.(png|eot|tiff|svg|woff2|woff|ttf|gif|mp3|jpg)$/, - loader: 'file', - query: { - name: 'files/[hash].[ext]' - } - }, - { - test: /\.html$/, - loader: htmlExtract.extract('html?attrs=link:href') - } - ] - }, - sassLoader: { - includePaths: ['node_modules/compass-mixins/lib'] - }, - plugins: [ - new webpack.ProvidePlugin({ - 'window.jQuery': 'jquery' - }), - htmlExtract, - new CopyWebpackPlugin([ - {from: 'images/emoji', to: 'emoji'} - ]), - new webpack.LoaderOptionsPlugin({ - minimize: !DEV, - debug: false - }) - ], - resolve: { - alias: { - jquery: 'jquery/dist/jquery' - }, - modules: [ - 'node_modules', - 'non_npm_dependencies', - path.resolve(__dirname) - ] - } -}; - -// Development mode configuration -if (DEV) { - if (FULLMAP) { - config.devtool = 'source-map'; - } else { - config.devtool = 'eval-cheap-module-source-map'; - } -} - -// Production mode configuration -if (!DEV) { - config.devtool = 'source-map'; - config.plugins.push( - new webpack.optimize.UglifyJsPlugin({ - 'screw-ie8': true, - mangle: { - toplevel: false - }, - compress: { - warnings: false - }, - comments: false - }) - ); - config.plugins.push( - new webpack.optimize.AggressiveMergingPlugin() - ); - config.plugins.push( - new webpack.optimize.OccurrenceOrderPlugin(true) - ); - config.plugins.push( - new webpack.optimize.DedupePlugin() - ); -} - -module.exports = config; diff --git a/webapp/webpack.config.js b/webapp/webpack.config.js index 6471731eb..224d67014 100644 --- a/webapp/webpack.config.js +++ b/webapp/webpack.config.js @@ -2,6 +2,7 @@ const webpack = require('webpack'); const path = require('path'); const ExtractTextPlugin = require('extract-text-webpack-plugin'); const CopyWebpackPlugin = require('copy-webpack-plugin'); +const nodeExternals = require('webpack-node-externals'); const htmlExtract = new ExtractTextPlugin('html', 'root.html'); @@ -9,6 +10,7 @@ const NPM_TARGET = process.env.npm_lifecycle_event; //eslint-disable-line no-pro var DEV = false; var FULLMAP = false; +var TEST = false; if (NPM_TARGET === 'run' || NPM_TARGET === 'run-fullmap') { DEV = true; if (NPM_TARGET === 'run-fullmap') { @@ -16,6 +18,11 @@ if (NPM_TARGET === 'run' || NPM_TARGET === 'run-fullmap') { } } +if (NPM_TARGET === 'test') { + DEV = false; + TEST = true; +} + var config = { entry: ['babel-polyfill', './root.jsx', 'root.html'], output: { @@ -139,4 +146,9 @@ if (!DEV) { ); } +// Test mode configuration +if (TEST) { + config.externals = [nodeExternals()]; +} + module.exports = config; |