Read/Write/Upgrade config.json with settings module

This commit is contained in:
Yuya Ochiai
2015-12-13 22:57:31 +09:00
parent 8cdb34f340
commit dc9794b1f5
5 changed files with 90 additions and 10 deletions

39
src/common/settings.js Normal file
View File

@@ -0,0 +1,39 @@
'use strict';
const fs = require('fs');
const version = 1;
var upgradeV0toV1 = function(config_v0) {
return {
url: [config_v0.url],
version: 1
};
};
var upgrade = function(config) {
var config_version = config.version ? config.version : 0;
switch (config_version) {
case 0:
return upgrade(upgradeV0toV1(config));
default:
return config;
}
};
module.exports = {
version: version,
upgrade: upgrade,
readFileSync: function(configFile) {
return JSON.parse(fs.readFileSync(configFile, 'utf8'));
},
writeFileSync: function(configFile, config) {
if (config.version != version) {
throw 'version ' + config.version + ' is not equal to ' + version;
}
var data = JSON.stringify(config, null, ' ');
fs.writeFileSync(configFile, data, 'utf8');
}
};

View File

@@ -8,15 +8,19 @@ const fs = require('fs');
var url = require('url');
var contextMenu = require('./menus/context');
const settings = require('./common/settings');
var webView = document.getElementById('mainWebview');
try {
var configFile = remote.getGlobal('config-file');
var str = fs.readFileSync(configFile);
var config = JSON.parse(str);
if (config.url) {
webView.setAttribute('src', config.url);
var config = settings.readFileSync(configFile);
if (config.version != settings.version) {
config = settings.upgrade(config);
settings.writeFileSync(configFile, config);
}
if (config.url[0]) {
webView.setAttribute('src', config.url[0]);
}
else {
throw 'URL is not configured';

View File

@@ -16,18 +16,17 @@
<script type="text/javascript">
const remote = require('electron').remote;
var fs = require('fs');
const settings = require('./common/settings');
var saveSettings = function() {
var configFile = remote.getGlobal('config-file');
var urlInput = document.getElementById('url');
var config = {
url: urlInput.value
url: [urlInput.value],
version: 1
};
fs.writeFile(configFile, JSON.stringify(config, null, ' '), function(err) {
if (err) throw err;
window.location.href = './index.html';
});
settings.writeFileSync(configFile, config);
window.location.href = './index.html';
}
var goBack = function() {

View File

@@ -59,6 +59,26 @@ describe('electron-mattermost', function() {
});
});
it('should upgrade v0 config file', function(done) {
const settings = require('../src/common/settings');
fs.writeFileSync(config_file_path, JSON.stringify({
url: mattermost_url
}));
var client = webdriverio.remote(options);
client
.init()
.getUrl().then(function(url) {
var p = path.parse(url);
p.base.should.equal('index.html');
})
.end().then(function() {
var str = fs.readFileSync(config_file_path, 'utf8');
var config = JSON.parse(str);
config.version.should.equal(settings.version);
done();
});
});
describe('index.html', function() {
before(function() {
fs.writeFileSync(config_file_path, JSON.stringify({

18
test/settings_test.js Normal file
View File

@@ -0,0 +1,18 @@
const should = require('should');
const fs = require('fs');
const settings = require('../src/common/settings');
const config_file_path = '../test_config.json'
describe('settings.js', function() {
it('should upgrade v0 config file', function() {
const v0_config = {
url: 'http://example.com/team'
};
config = settings.upgrade(v0_config);
config.url.length.should.equal(1);
config.url[0].should.equal(v0_config.url);
config.version.should.equal(settings.version);
});
});