import pytest
from pexpect import TIMEOUT
from tests.functional.utils import spawn, functional, bare

envs = ((u'bash', 'ubuntu-bash', u'''
FROM ubuntu:latest
RUN apt-get update
RUN apt-get install -yy bash
'''), (u'bash', 'generic-bash', u'''
FROM fedora:latest
RUN dnf install -yy python-devel sudo which gcc
'''))


@functional
@pytest.mark.skipif(
    bool(bare), reason="Can't be tested in bare run")
@pytest.mark.parametrize('shell, tag, dockerfile', envs)
def test_installation(request, shell, tag, dockerfile):
    proc = spawn(request, tag, dockerfile, shell, install=False)
    proc.sendline(u'cat /src/install.sh | sh - && $0')
    proc.sendline(u'thefuck --version')
    assert proc.expect([TIMEOUT, u'The Fuck'], timeout=600)
    proc.sendline(u'fuck')
    assert proc.expect([TIMEOUT, u'No fucks given'])