File size: 2,012 Bytes
5ed446f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import Providers from "../src/providers/index.js"
import examples from "../src/example.js"
import api from '../src/service/api.js'
import { Hono } from 'hono'
import { cors } from 'hono/cors'
import { test, expect } from 'vitest'

const app = new Hono()
app.use('*', cors())
app.get('/api', api)

// test('examples match providers', () => {
//     const p = new Providers()
//     const provider_list = p.get_provider_list()
//     expect(new Set(provider_list)).toEqual(new Set(Object.keys(examples)))
// })

test('test provider support_type', () => {
    const p = new Providers()
    Object.keys(examples).map(provider_name => {
        const provider = p.get(provider_name)
        Object.keys(examples[provider_name]).map(type => {
            expect(provider.support_type).toContain(type)
        })
    })
})

const YT_API = globalThis?.Deno?.env?.get("YT_API") || globalThis?.process?.env?.YT_API

test('test api', async () => {
    for (const provider_name in examples) {
        if (["ytmusic", "spotify"].includes(provider_name) && !YT_API) {
            console.log("external api not found, skipping...")
            continue
        }
        for (const type in examples[provider_name]) {

            const url = `http://localhost:3000/api?server=${provider_name}&type=${type}&id=${examples[provider_name][type].value}`
            let res, count = 0
            while (count < 5) {
                res = await app.request(url)
                console.log("testing " + url)
                console.log(res.status)
                if (200 <= res.status && res.status < 400) {
                    break
                } else {
                    count++
                    console.log("retrying " + count)
                    await new Promise(resolve => setTimeout(resolve, 1000))
                }
            }

            expect(res).toBeDefined()
            expect(res.status).toBeGreaterThanOrEqual(200)
            expect(res.status).toBeLessThan(400)
        }

    }
}, 10 * 60 * 1000)