spec/util_datetime_spec.lua
author Kim Alvefur <zash@zash.se>
Tue, 14 May 2024 17:07:47 +0200
changeset 13494 6f840763fc73
parent 12759 a09dacf660d2
permissions -rw-r--r--
net.server_epoll: Add support for systemd socket activation Allows creating listening sockets and accepting client connections before Prosody starts. This is unlike normal Prosody dynamic resource management, where ports may added and removed at any time, and the ports defined by the config. Weird things happen if these are closed (e.g. due to reload) so here we prevent closing and ensure sockets are reused when opened again.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8395
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     1
local util_datetime = require "util.datetime";
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     2
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     3
describe("util.datetime", function ()
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     4
	it("should have been loaded", function ()
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     5
		assert.is_table(util_datetime);
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     6
	end);
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     7
	describe("#date", function ()
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     8
		local date = util_datetime.date;
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     9
		it("should exist", function ()
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    10
			assert.is_function(date);
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    11
		end);
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    12
		it("should return a string", function ()
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    13
			assert.is_string(date());
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    14
		end);
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    15
		it("should look like a date", function ()
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    16
			assert.truthy(string.find(date(), "^%d%d%d%d%-%d%d%-%d%d$"));
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    17
		end);
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    18
		it("should work", function ()
12632
b95da9a593be util.datetime: Fix argument order in tests
Kim Alvefur <zash@zash.se>
parents: 8395
diff changeset
    19
			assert.equals("2006-01-02", date(1136239445));
8395
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    20
		end);
12633
4c1d3f817063 util.datetime: Add support for sub-second precision timestamps
Kim Alvefur <zash@zash.se>
parents: 12632
diff changeset
    21
		it("should ignore fractional parts", function ()
4c1d3f817063 util.datetime: Add support for sub-second precision timestamps
Kim Alvefur <zash@zash.se>
parents: 12632
diff changeset
    22
			assert.equals("2006-01-02", date(1136239445.5));
4c1d3f817063 util.datetime: Add support for sub-second precision timestamps
Kim Alvefur <zash@zash.se>
parents: 12632
diff changeset
    23
		end);
8395
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    24
	end);
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    25
	describe("#time", function ()
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    26
		local time = util_datetime.time;
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    27
		it("should exist", function ()
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    28
			assert.is_function(time);
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    29
		end);
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    30
		it("should return a string", function ()
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    31
			assert.is_string(time());
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    32
		end);
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    33
		it("should look like a timestamp", function ()
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    34
			-- Note: Sub-second precision and timezones are ignored
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    35
			assert.truthy(string.find(time(), "^%d%d:%d%d:%d%d"));
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    36
		end);
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    37
		it("should work", function ()
12632
b95da9a593be util.datetime: Fix argument order in tests
Kim Alvefur <zash@zash.se>
parents: 8395
diff changeset
    38
			assert.equals("22:04:05", time(1136239445));
8395
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    39
		end);
12633
4c1d3f817063 util.datetime: Add support for sub-second precision timestamps
Kim Alvefur <zash@zash.se>
parents: 12632
diff changeset
    40
		it("should handle precision", function ()
12759
a09dacf660d2 util.datetime: Add some missing test cases
Matthew Wild <mwild1@gmail.com>
parents: 12633
diff changeset
    41
			assert.equal("14:46:31.158200", time(1660488391.1582))
12633
4c1d3f817063 util.datetime: Add support for sub-second precision timestamps
Kim Alvefur <zash@zash.se>
parents: 12632
diff changeset
    42
			assert.equal("14:46:32.158200", time(1660488392.1582))
12759
a09dacf660d2 util.datetime: Add some missing test cases
Matthew Wild <mwild1@gmail.com>
parents: 12633
diff changeset
    43
			assert.equal("14:46:33.158200", time(1660488393.1582))
a09dacf660d2 util.datetime: Add some missing test cases
Matthew Wild <mwild1@gmail.com>
parents: 12633
diff changeset
    44
			assert.equal("14:46:33.999900", time(1660488393.9999))
12633
4c1d3f817063 util.datetime: Add support for sub-second precision timestamps
Kim Alvefur <zash@zash.se>
parents: 12632
diff changeset
    45
		end)
8395
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    46
	end);
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    47
	describe("#datetime", function ()
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    48
		local datetime = util_datetime.datetime;
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    49
		it("should exist", function ()
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    50
			assert.is_function(datetime);
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    51
		end);
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    52
		it("should return a string", function ()
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    53
			assert.is_string(datetime());
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    54
		end);
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    55
		it("should look like a timestamp", function ()
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    56
			-- Note: Sub-second precision and timezones are ignored
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    57
			assert.truthy(string.find(datetime(), "^%d%d%d%d%-%d%d%-%d%dT%d%d:%d%d:%d%d"));
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    58
		end);
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    59
		it("should work", function ()
12632
b95da9a593be util.datetime: Fix argument order in tests
Kim Alvefur <zash@zash.se>
parents: 8395
diff changeset
    60
			assert.equals("2006-01-02T22:04:05Z", datetime(1136239445));
8395
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    61
		end);
12633
4c1d3f817063 util.datetime: Add support for sub-second precision timestamps
Kim Alvefur <zash@zash.se>
parents: 12632
diff changeset
    62
		it("should handle precision", function ()
12759
a09dacf660d2 util.datetime: Add some missing test cases
Matthew Wild <mwild1@gmail.com>
parents: 12633
diff changeset
    63
			assert.equal("2022-08-14T14:46:31.158200Z", datetime(1660488391.1582))
12633
4c1d3f817063 util.datetime: Add support for sub-second precision timestamps
Kim Alvefur <zash@zash.se>
parents: 12632
diff changeset
    64
			assert.equal("2022-08-14T14:46:32.158200Z", datetime(1660488392.1582))
12759
a09dacf660d2 util.datetime: Add some missing test cases
Matthew Wild <mwild1@gmail.com>
parents: 12633
diff changeset
    65
			assert.equal("2022-08-14T14:46:33.158200Z", datetime(1660488393.1582))
a09dacf660d2 util.datetime: Add some missing test cases
Matthew Wild <mwild1@gmail.com>
parents: 12633
diff changeset
    66
			assert.equal("2022-08-14T14:46:33.999900Z", datetime(1660488393.9999))
12633
4c1d3f817063 util.datetime: Add support for sub-second precision timestamps
Kim Alvefur <zash@zash.se>
parents: 12632
diff changeset
    67
		end)
8395
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    68
	end);
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    69
	describe("#legacy", function ()
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    70
		local legacy = util_datetime.legacy;
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    71
		it("should exist", function ()
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    72
			assert.is_function(legacy);
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    73
		end);
12759
a09dacf660d2 util.datetime: Add some missing test cases
Matthew Wild <mwild1@gmail.com>
parents: 12633
diff changeset
    74
		it("should not add precision", function ()
a09dacf660d2 util.datetime: Add some missing test cases
Matthew Wild <mwild1@gmail.com>
parents: 12633
diff changeset
    75
			assert.equal("20220814T14:46:31", legacy(1660488391.1582));
a09dacf660d2 util.datetime: Add some missing test cases
Matthew Wild <mwild1@gmail.com>
parents: 12633
diff changeset
    76
		end);
8395
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    77
	end);
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    78
	describe("#parse", function ()
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    79
		local parse = util_datetime.parse;
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    80
		it("should exist", function ()
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    81
			assert.is_function(parse);
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    82
		end);
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    83
		it("should work", function ()
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    84
			-- Timestamp used by Go
12632
b95da9a593be util.datetime: Fix argument order in tests
Kim Alvefur <zash@zash.se>
parents: 8395
diff changeset
    85
			assert.equals(1511114293, parse("2017-11-19T17:58:13Z"));
b95da9a593be util.datetime: Fix argument order in tests
Kim Alvefur <zash@zash.se>
parents: 8395
diff changeset
    86
			assert.equals(1511114330, parse("2017-11-19T18:58:50+0100"));
b95da9a593be util.datetime: Fix argument order in tests
Kim Alvefur <zash@zash.se>
parents: 8395
diff changeset
    87
			assert.equals(1136239445, parse("2006-01-02T15:04:05-0700"));
12759
a09dacf660d2 util.datetime: Add some missing test cases
Matthew Wild <mwild1@gmail.com>
parents: 12633
diff changeset
    88
			assert.equals(1136239445, parse("2006-01-02T15:04:05-07"));
8395
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    89
		end);
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    90
		it("should handle timezones", function ()
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    91
			-- https://xmpp.org/extensions/xep-0082.html#example-2 and 3
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    92
			assert.equals(parse("1969-07-21T02:56:15Z"), parse("1969-07-20T21:56:15-05:00"));
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    93
		end);
12633
4c1d3f817063 util.datetime: Add support for sub-second precision timestamps
Kim Alvefur <zash@zash.se>
parents: 12632
diff changeset
    94
		it("should handle precision", function ()
4c1d3f817063 util.datetime: Add support for sub-second precision timestamps
Kim Alvefur <zash@zash.se>
parents: 12632
diff changeset
    95
			-- floating point comparison is not an exact science
4c1d3f817063 util.datetime: Add support for sub-second precision timestamps
Kim Alvefur <zash@zash.se>
parents: 12632
diff changeset
    96
			assert.truthy(math.abs(1660488392.1582 - parse("2022-08-14T14:46:32.158200Z")) < 0.001)
4c1d3f817063 util.datetime: Add support for sub-second precision timestamps
Kim Alvefur <zash@zash.se>
parents: 12632
diff changeset
    97
		end)
12759
a09dacf660d2 util.datetime: Add some missing test cases
Matthew Wild <mwild1@gmail.com>
parents: 12633
diff changeset
    98
		it("should return nil when given invalid inputs", function ()
a09dacf660d2 util.datetime: Add some missing test cases
Matthew Wild <mwild1@gmail.com>
parents: 12633
diff changeset
    99
			assert.is_nil(parse(nil));
a09dacf660d2 util.datetime: Add some missing test cases
Matthew Wild <mwild1@gmail.com>
parents: 12633
diff changeset
   100
			assert.is_nil(parse("hello world"));
a09dacf660d2 util.datetime: Add some missing test cases
Matthew Wild <mwild1@gmail.com>
parents: 12633
diff changeset
   101
			assert.is_nil(parse("2017-11-19T18:58:50$0100"));
a09dacf660d2 util.datetime: Add some missing test cases
Matthew Wild <mwild1@gmail.com>
parents: 12633
diff changeset
   102
		end);
8395
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   103
	end);
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   104
end);