A Twitch.tv viewer reward and games system.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

67 lines
1.6 KiB

var common = require('../../common');
var connection = common.createConnection();
var assert = require('assert');
common.useTestDb(connection);
var table = 'timezone_test';
connection.query([
'CREATE TEMPORARY TABLE `' + table + '`(',
'`offset` varchar(10),',
'`dt` datetime',
') ENGINE=InnoDB DEFAULT CHARSET=utf8'
].join('\n'));
var tests = [ 0, 1, 5, 12, 26, -1, -5, -20, 'Z', 'local' ];
connection.query('DELETE FROM ' + table);
testNextDate();
function testNextDate() {
if (tests.length === 0) {
return connection.end();
}
var test = tests.pop();
testDate(test, function () {
testNextDate();
});
}
function testDate(offset, cb) {
var dt = new Date();
if (offset == 'Z' || offset == 'local') {
connection.config.timezone = offset;
} else {
connection.config.timezone = (offset < 0 ? "-" : "+") + pad2(Math.abs(offset)) + ":00";
}
connection.query('INSERT INTO ' + table + ' SET ?', { offset: offset, dt: dt });
if (offset == 'Z') {
dt.setTime(dt.getTime() + (dt.getTimezoneOffset() * 60000));
} else if (offset != 'local') {
dt.setTime(dt.getTime() + (dt.getTimezoneOffset() * 60000) + (offset * 3600000));
}
connection.query({
sql: 'SELECT * FROM ' + table + ' WHERE offset = \'' + offset + '\'',
typeCast: function (field, next) {
if (field.type != 'DATETIME') return next();
return new Date(field.string());
}
}, function (err, result) {
if (err) throw err;
assert.strictEqual(dt.toString(), result[0].dt.toString());
return cb();
});
}
function pad2(v) {
return (v < 10 ? "0" : "") + v;
}