[READ-ONLY] Mirror of https://github.com/improsocial/impro An extensible Bluesky client for web impro.social
6

Configure Feed

Select the types of activity you want to include in your feed.

Update router specs

Grace Kind (Dec 7, 2025, 12:27 PM EST) d1c9bdd4 488147fb

+13 -49
+1 -1
src/index.html
··· 145 145 }; 146 146 147 147 const router = new Router(); 148 - router.addRoute("/", () => homeView, "home"); 148 + router.addRoute("/", () => homeView); 149 149 router.addRoute("/login", () => loginView); 150 150 router.addRoute("/notifications", () => notificationsView); 151 151 router.addRoute("/messages/inbox", () => chatRequestsView);
+2
tests/env.js
··· 8 8 // Enable JSDOM 9 9 const dom = new JSDOM(); 10 10 globalThis.window = dom.window; 11 + globalThis.window.scrollTo = () => {}; 11 12 globalThis.document = dom.window.document; 12 13 globalThis.HTMLElement = dom.window.HTMLElement; 13 14 globalThis.customElements = dom.window.customElements; 15 + globalThis.CustomEvent = dom.window.CustomEvent;
+10 -48
tests/router.test.js
··· 22 22 }); 23 23 24 24 t.describe("addRoute", (it) => { 25 - it("should add a route with viewGetter and id", () => { 25 + it("should add a route with viewGetter", () => { 26 26 const router = new Router(); 27 27 const viewGetter = () => "view"; 28 - router.addRoute("/test", viewGetter, "test-id"); 28 + router.addRoute("/test", viewGetter); 29 29 assert(router.routes["/test"]); 30 30 assertEquals(router.routes["/test"].viewGetter, viewGetter); 31 - assertEquals(router.routes["/test"].id, "test-id"); 32 31 }); 33 32 34 33 it("should add multiple routes", () => { 35 34 const router = new Router(); 36 - router.addRoute("/path1", () => {}, "id1"); 37 - router.addRoute("/path2", () => {}, "id2"); 35 + router.addRoute("/path1", () => {}); 36 + router.addRoute("/path2", () => {}); 38 37 assertEquals(Object.keys(router.routes).length, 2); 39 38 }); 40 39 }); ··· 101 100 it("should match existing route", () => { 102 101 const router = new Router(); 103 102 const viewGetter = () => "view"; 104 - router.addRoute("/test", viewGetter, "test-id"); 103 + router.addRoute("/test", viewGetter); 105 104 const result = router.match("/test"); 106 105 assertEquals(result.route, "/test"); 107 106 assertEquals(result.viewGetter, viewGetter); 108 107 assertEquals(result.params, {}); 109 - assertEquals(result.id, "test-id"); 110 108 }); 111 109 112 110 it("should match route with parameters", () => { 113 111 const router = new Router(); 114 112 const viewGetter = () => "view"; 115 - router.addRoute("/user/:id", viewGetter, "user-id"); 113 + router.addRoute("/user/:id", viewGetter); 116 114 const result = router.match("/user/123"); 117 115 assertEquals(result.route, "/user/:id"); 118 116 assertEquals(result.params, { id: "123" }); ··· 126 124 assertEquals(result.route, null); 127 125 assertEquals(result.viewGetter, notFoundView); 128 126 assertEquals(result.params, {}); 129 - assertEquals(result.id, null); 130 127 }); 131 128 132 129 it("should match first matching route", () => { 133 130 const router = new Router(); 134 131 const view1 = () => "view1"; 135 132 const view2 = () => "view2"; 136 - router.addRoute("/user/:id", view1, "id1"); 137 - router.addRoute("/user/:name", view2, "id2"); 133 + router.addRoute("/user/:id", view1); 134 + router.addRoute("/user/:name", view2); 138 135 const result = router.match("/user/123"); 139 136 assertEquals(result.viewGetter, view1); 140 137 }); ··· 157 154 158 155 const view = { name: "TestView" }; 159 156 const viewGetter = () => Promise.resolve(view); 160 - router.addRoute("/test", viewGetter, "test-id"); 157 + router.addRoute("/test", viewGetter); 161 158 162 159 let renderCalled = false; 163 160 let renderArgs = null; ··· 175 172 assert(container.contains(renderArgs.container)); 176 173 }); 177 174 178 - it("should pass scrollY to renderFunc", async () => { 179 - const router = new Router(); 180 - const container = document.createElement("div"); 181 - router.mount(container); 182 - 183 - router.addRoute("/test", () => Promise.resolve({}), "test-id"); 184 - 185 - let savedScrollY = null; 186 - router.renderRoute((args) => { 187 - savedScrollY = args.savedScrollY; 188 - }); 189 - 190 - await router.load("/test", { scrollY: 100 }); 191 - 192 - assertEquals(savedScrollY, 100); 193 - }); 194 - 195 - it("should remove previous route container", async () => { 196 - const router = new Router(); 197 - const container = document.createElement("div"); 198 - router.mount(container); 199 - 200 - router.addRoute("/test1", () => Promise.resolve({}), "id1"); 201 - router.addRoute("/test2", () => Promise.resolve({}), "id2"); 202 - router.renderRoute(() => {}); 203 - 204 - await router.load("/test1"); 205 - const firstContainer = router.currentRouteContainer; 206 - assert(container.contains(firstContainer)); 207 - 208 - await router.load("/test2"); 209 - assertEquals(container.contains(firstContainer), false); 210 - assert(container.contains(router.currentRouteContainer)); 211 - }); 212 - 213 175 it("should pass route parameters to renderFunc", async () => { 214 176 const router = new Router(); 215 177 const container = document.createElement("div"); 216 178 router.mount(container); 217 179 218 - router.addRoute("/user/:id", () => Promise.resolve({}), "user-id"); 180 + router.addRoute("/user/:id", () => Promise.resolve({})); 219 181 220 182 let receivedParams = null; 221 183 router.renderRoute((args) => {