╭ changed ─────────╮ │src/test/event.zig│ ╰──────────────────╯ ╭───────────╮ │← all files│ ╰───────────╯ ╭───────────────────────────────────────────────────────╮ │ 1 const std = @import("std"); │ │ 2 -const builtin = @import("builtin"); │ │ 3 -const xit = @import("xit"); │ │ 2 +const hx = @import("haxy"); │ │ 3 +const evt = hx.event; │ │ 4 +const xit = hx.xit; │ │ 5 const rp = xit.repo; │ │ 6 const hash = xit.hash; │ │ 6 - │ │ 7 -const event_id_size: usize = 32; │ │ 8 - │ │ 9 -const EventData = union(enum) { │ │10 - issue: struct { │ │11 - title: []const u8, │ │12 - description: []const u8, │ │13 - tags: []const []const u8, │ │14 - }, │ │15 -}; │ │16 - │ │17 -const Event = struct { │ │18 - id: [event_id_size * 2]u8, │ │19 - data: EventData, │ │20 -}; │ │21 - │ │22 -fn randomId(random: std.Random) [event_id_size]u8 {│ │23 - var id_bytes: [event_id_size]u8 = undefined; │ │24 - random.bytes(&id_bytes); │ │25 - return id_bytes; │ │26 -} │ │ 7 │ │ 8 test "simple" { │ │ 9 const io = std.testing.io; │ ╰───────────────────────────────────────────────────────╯ ╭────────────────────────────────────────────────────────────────────────╮ │38 │ │39 var prng = std.Random.DefaultPrng.init(std.testing.random_seed);│ │40 │ │61 - const first_event_id = randomId(prng.random()); │ │41 + const first_event_id = evt.randomId(prng.random()); │ │42 │ │63 - const events_to_process = [_]Event{ │ │43 + const events_to_process = [_]evt.Event{ │ │44 .{ │ │45 .id = std.fmt.bytesToHex(first_event_id, .lower), │ │46 .data = .{ │ ╰────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────╮ │63 }, │ │64 }, │ │65 .{ │ │86 - .id = std.fmt.bytesToHex(randomId(prng.random()), .lower), │ │66 + .id = std.fmt.bytesToHex(evt.randomId(prng.random()), .lower), │ │67 .data = .{ │ │68 .issue = .{ │ │69 .title = "Search results ignore archived project filter",│ ╰─────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────╮ │73 }, │ │74 }, │ │75 .{ │ │96 - .id = std.fmt.bytesToHex(randomId(prng.random()), .lower), │ │76 + .id = std.fmt.bytesToHex(evt.randomId(prng.random()), .lower), │ │77 .data = .{ │ │78 .issue = .{ │ │79 .title = "Issue list does not persist selected sort order",│ ╰───────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────╮ │109 // read and parse all of the events from the repo│ │110 // │ │111 │ │132 - var events: std.ArrayList(Event) = .empty; │ │112 + var events: std.ArrayList(evt.Event) = .empty; │ │113 defer events.deinit(allocator); │ │114 │ │115 { │ ╰──────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │134 // add events in reverse order so the earliest event is first. │ │135 for (0..event_strs.items.len) |i| { │ │136 const event_str = event_strs.items[event_strs.items.len - i - 1]; │ │157 - const event = try std.json.parseFromSliceLeaky(Event, arena.allocator(), event_str, .{}); │ │137 + const event = try std.json.parseFromSliceLeaky(evt.Event, arena.allocator(), event_str, .{});│ │138 try events.append(allocator, event); │ │139 } │ │140 } │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────╮ │144 // │ │145 │ │146 const Ctx = struct { │ │167 - events: []Event, │ │147 + events: []evt.Event, │ │148 │ │149 pub fn run(ctx: @This(), cursor: *Repo.DB.Cursor(.read_write)) !void {│ │150 const moment = try Repo.DB.HashMap(.read_write).init(cursor.*); │ ╰───────────────────────────────────────────────────────────────────────────────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │154 const haxy = try Repo.DB.HashMap(.read_write).init(haxy_cursor); │ │155 │ │156 // try reading the last event id that was processed in the db │ │177 - var last_event_id_maybe: ?[event_id_size]u8 = null; │ │157 + var last_event_id_maybe: ?[evt.id_size]u8 = null; │ │158 if (try haxy.getCursor(hash.hashInt(repo_opts.hash, "last-event-id"))) |last_event_id_cursor| {│ │179 - var last_event_id_buffer: [event_id_size]u8 = undefined; │ │159 + var last_event_id_buffer: [evt.id_size]u8 = undefined; │ │160 _ = try last_event_id_cursor.readBytes(&last_event_id_buffer); │ │161 last_event_id_maybe = last_event_id_buffer; │ │162 } │ ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────╮ │164 // for each event we want to process... │ │165 for (ctx.events) |event| { │ │166 // get the id of the current event as bytes │ │187 - var current_event_id_buffer: [event_id_size]u8 = undefined; │ │167 + var current_event_id_buffer: [evt.id_size]u8 = undefined; │ │168 _ = try std.fmt.hexToBytes(&current_event_id_buffer, &event.id); │ │169 │ │170 // map with the views as they appeared when each event was processed.│ ╰──────────────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │248 { │ │249 // get the last event id │ │250 const last_event_id_cursor = try haxy.getCursor(hash.hashInt(repo_opts.hash, "last-event-id")) orelse return error.NotFound;│ │271 - var last_event_id_buffer: [event_id_size]u8 = undefined; │ │251 + var last_event_id_buffer: [evt.id_size]u8 = undefined; │ │252 _ = try last_event_id_cursor.readBytes(&last_event_id_buffer); │ │253 │ │254 // get the latest views (the views generated by the last event id) │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯