import pytest
import time

dockerfile = u'''
FROM ubuntu:latest
RUN apt-get update
RUN apt-get install -yy python3 python3-pip python3-dev git
RUN pip3 install -U setuptools
RUN ln -s /usr/bin/pip3 /usr/bin/pip
RUN adduser --disabled-password --gecos '' test
ENV SEED "{seed}"
WORKDIR /src
USER test
RUN echo 'eval $(thefuck --alias)' > /home/test/.bashrc
RUN echo > /home/test/.bash_history
RUN git config --global user.email "you@example.com"
RUN git config --global user.name "Your Name"
USER root
'''.format(seed=time.time())


def plot(proc, TIMEOUT):
    proc.sendline(u'cd /home/test/')
    proc.sendline(u'fuck')
    assert proc.expect([TIMEOUT, u'No fucks given'])
    proc.sendline(u'git init')
    proc.sendline(u'git add .')
    proc.sendline(u'git commit -a -m init')
    proc.sendline(u'git brnch')
    proc.sendline(u'fuck')
    assert proc.expect([TIMEOUT, u'git branch'])
    proc.send('\n')
    assert proc.expect([TIMEOUT, u'master'])
    proc.sendline(u'echo test')
    proc.sendline(u'echo tst')
    proc.sendline(u'fuck')
    assert proc.expect([TIMEOUT, u'echo test'])
    proc.send('\n')
    assert proc.expect([TIMEOUT, u'test'])


@pytest.mark.functional
@pytest.mark.skip_without_docker
@pytest.mark.benchmark(min_rounds=10)
def test_performance(spawnu, TIMEOUT, benchmark):
    proc = spawnu(u'thefuck/ubuntu-python3-bash-performance',
                  dockerfile, u'bash')
    proc.sendline(u'pip install /src')
    proc.sendline(u'su test')
    assert benchmark(plot, proc, TIMEOUT) is None