Annotate

spec/util_datetime_spec.lua @ 13143:3ec48555b773

mod_storage_sql: Add UPSERT support Currently limited to SQLite3 for lack of testing on other databases. Adds a migration to replace the non-UNIQUE prosody_index, renaming it prosody_unique_index since ALTER INDEX does not seem to be portable.
author Kim Alvefur <zash@zash.se>
date Sat, 10 Jun 2023 15:44:09 +0200
parent 12755:a09dacf660d2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8392
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 ()
12628
b95da9a593be util.datetime: Fix argument order in tests
Kim Alvefur <zash@zash.se>
parents: 8392
diff changeset
19 assert.equals("2006-01-02", date(1136239445));
8392
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
20 end);
12629
4c1d3f817063 util.datetime: Add support for sub-second precision timestamps
Kim Alvefur <zash@zash.se>
parents: 12628
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: 12628
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: 12628
diff changeset
23 end);
8392
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 ()
12628
b95da9a593be util.datetime: Fix argument order in tests
Kim Alvefur <zash@zash.se>
parents: 8392
diff changeset
38 assert.equals("22:04:05", time(1136239445));
8392
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
39 end);
12629
4c1d3f817063 util.datetime: Add support for sub-second precision timestamps
Kim Alvefur <zash@zash.se>
parents: 12628
diff changeset
40 it("should handle precision", function ()
12755
a09dacf660d2 util.datetime: Add some missing test cases
Matthew Wild <mwild1@gmail.com>
parents: 12629
diff changeset
41 assert.equal("14:46:31.158200", time(1660488391.1582))
12629
4c1d3f817063 util.datetime: Add support for sub-second precision timestamps
Kim Alvefur <zash@zash.se>
parents: 12628
diff changeset
42 assert.equal("14:46:32.158200", time(1660488392.1582))
12755
a09dacf660d2 util.datetime: Add some missing test cases
Matthew Wild <mwild1@gmail.com>
parents: 12629
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: 12629
diff changeset
44 assert.equal("14:46:33.999900", time(1660488393.9999))
12629
4c1d3f817063 util.datetime: Add support for sub-second precision timestamps
Kim Alvefur <zash@zash.se>
parents: 12628
diff changeset
45 end)
8392
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 ()
12628
b95da9a593be util.datetime: Fix argument order in tests
Kim Alvefur <zash@zash.se>
parents: 8392
diff changeset
60 assert.equals("2006-01-02T22:04:05Z", datetime(1136239445));
8392
ff8e122526f4 util.datetime: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
61 end);
12629
4c1d3f817063 util.datetime: Add support for sub-second precision timestamps
Kim Alvefur <zash@zash.se>
parents: 12628
diff changeset
62 it("should handle precision", function ()
12755
a09dacf660d2 util.datetime: Add some missing test cases
Matthew Wild <mwild1@gmail.com>
parents: 12629
diff changeset
63 assert.equal("2022-08-14T14:46:31.158200Z", datetime(1660488391.1582))
12629
4c1d3f817063 util.datetime: Add support for sub-second precision timestamps
Kim Alvefur <zash@zash.se>
parents: 12628
diff changeset
64 assert.equal("2022-08-14T14:46:32.158200Z", datetime(1660488392.1582))
12755
a09dacf660d2 util.datetime: Add some missing test cases
Matthew Wild <mwild1@gmail.com>
parents: 12629
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: 12629
diff changeset
66 assert.equal("2022-08-14T14:46:33.999900Z", datetime(1660488393.9999))
12629
4c1d3f817063 util.datetime: Add support for sub-second precision timestamps
Kim Alvefur <zash@zash.se>
parents: 12628
diff changeset
67 end)
8392
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);
12755
a09dacf660d2 util.datetime: Add some missing test cases
Matthew Wild <mwild1@gmail.com>
parents: 12629
diff changeset
74 it("should not add precision", function ()
a09dacf660d2 util.datetime: Add some missing test cases
Matthew Wild <mwild1@gmail.com>
parents: 12629
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: 12629
diff changeset
76 end);
8392
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
12628
b95da9a593be util.datetime: Fix argument order in tests
Kim Alvefur <zash@zash.se>
parents: 8392
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: 8392
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: 8392
diff changeset
87 assert.equals(1136239445, parse("2006-01-02T15:04:05-0700"));
12755
a09dacf660d2 util.datetime: Add some missing test cases
Matthew Wild <mwild1@gmail.com>
parents: 12629
diff changeset
88 assert.equals(1136239445, parse("2006-01-02T15:04:05-07"));
8392
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);
12629
4c1d3f817063 util.datetime: Add support for sub-second precision timestamps
Kim Alvefur <zash@zash.se>
parents: 12628
diff changeset
94 it("should handle precision", function ()
4c1d3f817063 util.datetime: Add support for sub-second precision timestamps
Kim Alvefur <zash@zash.se>
parents: 12628
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: 12628
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: 12628
diff changeset
97 end)
12755
a09dacf660d2 util.datetime: Add some missing test cases
Matthew Wild <mwild1@gmail.com>
parents: 12629
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: 12629
diff changeset
99 assert.is_nil(parse(nil));
a09dacf660d2 util.datetime: Add some missing test cases
Matthew Wild <mwild1@gmail.com>
parents: 12629
diff changeset
100 assert.is_nil(parse("hello world"));
a09dacf660d2 util.datetime: Add some missing test cases
Matthew Wild <mwild1@gmail.com>
parents: 12629
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: 12629
diff changeset
102 end);
8392
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);