|
3 | 3 | getExternalArchiveUrl, |
4 | 4 | getInternalUrl, |
5 | 5 | parseAccessions, |
| 6 | + isAccessionUrl, |
6 | 7 | startsWithAccession, |
7 | 8 | } from "./accessionLinks"; |
8 | 9 |
|
@@ -161,3 +162,44 @@ describe("parseAccessions", () => { |
161 | 162 | expect(parseAccessions("brain single cell rna")).toEqual([]); |
162 | 163 | }); |
163 | 164 | }); |
| 165 | + |
| 166 | +describe("isAccessionUrl", () => { |
| 167 | + it("recognizes pasted archive URLs and finds the accession inside", () => { |
| 168 | + const cases: [string, string][] = [ |
| 169 | + [ |
| 170 | + "http://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE317357", |
| 171 | + "/p/GSE317357", |
| 172 | + ], |
| 173 | + ["https://www.ncbi.nlm.nih.gov/sra/?term=SRX1234567", "/e/SRX1234567"], |
| 174 | + ["https://www.ebi.ac.uk/ena/browser/view/SRP123456", "/p/SRP123456"], |
| 175 | + [ |
| 176 | + "https://www.ebi.ac.uk/biostudies/arrayexpress/studies/E-MTAB-1234", |
| 177 | + "/p/E-MTAB-1234", |
| 178 | + ], |
| 179 | + ["https://ddbj.nig.ac.jp/search/entry/gea/E-GEAD-282", "/p/E-GEAD-282"], |
| 180 | + ["https://ngdc.cncb.ac.cn/gsa/browse/CRA000004", "/p/CRA000004"], |
| 181 | + ["www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSM7", "/s/GSM7"], |
| 182 | + ]; |
| 183 | + for (const [url, expected] of cases) { |
| 184 | + expect(isAccessionUrl(url)).toBe(true); |
| 185 | + expect(parseAccessions(url)[0]?.url).toBe(expected); |
| 186 | + } |
| 187 | + }); |
| 188 | + |
| 189 | + it("keeps PRJ/submission URLs on their async-resolve path", () => { |
| 190 | + const prj = parseAccessions( |
| 191 | + "https://www.ebi.ac.uk/ena/browser/view/PRJEB12345", |
| 192 | + )[0]; |
| 193 | + expect(isAccessionUrl("https://www.ebi.ac.uk/ena/browser/view/PRJEB12345")) |
| 194 | + .toBe(true); |
| 195 | + expect(prj.isPrj).toBe(true); |
| 196 | + }); |
| 197 | + |
| 198 | + it("ignores non-URLs and URLs with no accession", () => { |
| 199 | + expect(isAccessionUrl("https://seqout.org/about")).toBe(false); |
| 200 | + expect(isAccessionUrl("https://github.com/some/repo")).toBe(false); |
| 201 | + // Not a URL: already handled by startsWithAccession, not this. |
| 202 | + expect(isAccessionUrl("GSE317357")).toBe(false); |
| 203 | + expect(isAccessionUrl("cancer single cell")).toBe(false); |
| 204 | + }); |
| 205 | +}); |
0 commit comments