🏡 index : quine-global/webdriverio.git

import { it, expect, vi, describe } from 'vitest'
import { parseOverwrite, getPatternParam } from '../../../src/utils/interception/utils.js'

describe('parseOverwrite', () => {
    it('should parse request overwrite', () => {
        expect(parseOverwrite({}, {} as any)).toEqual({})
        expect(parseOverwrite({
            body: 'foobar',
            headers: { foo: 'bar' },
            cookies: [{ name: 'foo', value: 'bar' }],
            method: 'GET',
            url: 'http://foobar.com',
            statusCode: 123
        }, {} as any)).toMatchInlineSnapshot(`
          {
            "body": {
              "type": "string",
              "value": "foobar",
            },
            "cookies": [
              {
                "domain": undefined,
                "expires": undefined,
                "httpOnly": undefined,
                "name": "foo",
                "path": undefined,
                "sameSite": undefined,
                "secure": undefined,
                "value": {
                  "type": "string",
                  "value": "bar",
                },
              },
            ],
            "headers": [
              {
                "name": "foo",
                "value": {
                  "type": "string",
                  "value": "bar",
                },
              },
            ],
            "method": "GET",
            "statusCode": 123,
            "url": "http://foobar.com",
          }
        `)
    })

    it('should allow to overwrite using functions', () => {
        const body = vi.fn()
        const headers = vi.fn()
        const cookies = vi.fn()
        const method = vi.fn()
        const url = vi.fn()
        const statusCode = vi.fn()
        expect(parseOverwrite({
            body,
            headers,
            cookies,
            method,
            url,
            statusCode
        }, {} as any)).toMatchInlineSnapshot(`
          {
            "body": {
              "type": "base64",
              "value": "IiI=",
            },
            "cookies": [],
            "headers": [],
            "method": undefined,
            "statusCode": undefined,
            "url": undefined,
          }
        `)
        expect(body).toBeCalledTimes(1)
        expect(headers).toBeCalledTimes(1)
        expect(cookies).toBeCalledTimes(1)
        expect(method).toBeCalledTimes(1)
        expect(url).toBeCalledTimes(1)
        expect(statusCode).toBeCalledTimes(1)
    })
})

describe('getPatternParam', () => {
    it('should get correct pattern param', () => {
        expect(getPatternParam({ protocol: 'https', hostname: 'foo.com', port: '443', pathname: '/bar' } as any, 'protocol')).toBe('https')
        expect(getPatternParam({ protocol: 'https', hostname: 'foo.com', port: '443', pathname: '/bar' } as any, 'hostname')).toBe('foo.com')
        expect(getPatternParam({ protocol: 'https', hostname: 'foo.com', port: '443', pathname: '/bar' } as any, 'port')).toBe('443')
        expect(getPatternParam({ protocol: 'https', hostname: 'foo.com', port: '443', pathname: '/bar' } as any, 'pathname')).toBe('/bar')
        expect(getPatternParam({ protocol: 'https', hostname: 'foo.com', port: '', pathname: '/bar' } as any, 'port')).toBe('443')
        expect(getPatternParam({ protocol: 'https', hostname: 'foo.com', port: '', pathname: '/bar' } as any, 'pathname')).toBe('/bar')
        expect(getPatternParam({ protocol: 'https', hostname: 'foo.com', port: '', pathname: '*' } as any, 'pathname')).toBe('\\*')
        expect(getPatternParam({ pathname: '*', hostname: '*' } as any, 'hostname')).toBe(undefined)
    })
})