import { test } from 'zora'
import cheerio from 'cheerio'
import request from 'supertest'
import app from '../app'
import links from '../resources/links.json'
import assetLinks from '../resources/assetlinks.json'
import appleSiteAssociation from '../resources/apple-app-site-association.json'
const host = 'join.status.im'
const chatKey = 'e139115a1acc72510388fcf7e1cf492784c9a839888b25271465f4f1baa38c2d3997f8fd78828eb8628bc3bb55ababd884c6002d18330d59c404cc9ce3e4fb35'
const chatName = 'Lavender Trivial Goral'
const srv = request(app)
const get = (path) => (
srv.get(path).set('Host', host)
)
/* helpers for querying returned HTML */
const q = (res, query) => cheerio.load(res.text)(query)
const html = (res, query) => (cheerio.load(res.text)(query).html() || "").trim()
const meta = (res, name) => q(res, `meta[property="${name}"]`).attr('content')
test('test browser routes', t => {
t.test('/b/ens.domains - VALID', async t => {
const res = await get('/b/ens.domains')
t.eq(res.statusCode, 200, 'returns 200')
t.eq(meta(res, 'status-im:target'), 'ens.domains', 'contains target')
t.eq(meta(res, 'al:ios:url'), 'status-im://b/ens.domains', 'contains ios url')
t.eq(meta(res, 'al:android:url'), 'status-im://b/ens.domains', 'contains android url')
t.eq(html(res, 'div.info'), 'Browse to ens.domains in Status', 'contains prompt')
})
t.test('/b/ - XSS', async t => {
const res = await get('/b/')
t.eq(res.statusCode, 400, 'returns 400')
t.eq(html(res, 'h3#header'), 'Invalid input format', 'contains warning')
t.eq(html(res, 'code#error'), 'Input contains HTML: <script>fail;</script>', 'contains error')
})
t.test('/b/google.com/ - XSS', async t => {
const res = await get('/b/google.com/')
t.eq(res.statusCode, 400, 'returns 400')
t.eq(html(res, 'h3#header'), 'Invalid input format', 'contains warning')
t.eq(html(res, 'code#error'), 'Input contains HTML: google.com/<script>fail;</script>', 'contains error')
})
})
test('test user ens routes', t => {
t.test('/u/jakubgs.eth - VALID', async t => {
const res = await get('/u/jakubgs.eth')
t.eq(res.statusCode, 200, 'returns 200')
t.eq(meta(res, 'al:ios:url'), 'status-im://u/jakubgs.eth', 'contains ios url')
t.eq(meta(res, 'al:android:url'), 'status-im://u/jakubgs.eth', 'contains android url')
t.eq(html(res, 'div.info'), 'Chat and transact with @jakubgs.eth in Status.', 'contains prompt')
})
t.test('/u/jAkuBgs.eth - UPPER CASE', async t => { /* we don't allow uppercase */
const res = await get('/u/jAkuBgs.eth')
t.eq(res.statusCode, 200, 'returns 200')
t.eq(q(res, 'a#redirect').attr('href'), '/u/jakubgs.eth', 'lower case url')
t.eq(html(res, 'a#redirect'), 'Redirect Me', 'redirect button')
t.eq(html(res, 'div.info'), 'Beware of phishing attacks.', 'contains warning')
})
t.test('/u/