class PseudoQueue():
    def __init__(self):
        self.stack1 = Stack()
        self.stack2 = Stack()

    def enqueue(self, value):
        """
        Args:
            value ([int]): [inserts the value to stack1 using FIFO]
        """
        self.stack1.push(value)

    def dequeue(self):
        """[Return the "first in" value from stack1.]

        Returns:
            [int/value]: [the first in value from stack1]
        """
        while self.stack1.peek():
            if self.stack1.top.next == None:
                return self.stack1.top.value
            else:
                temp = self.stack1.pop()
                self.stack2.push(temp)
                continue
def test_peek():
    s = Stack()
    s.push("apple")
    s.push("banana")
    actual = s.peek()
    expected = "banana"
    assert actual == expected
def test_peek(stack_3_vals):

    assert stack_3_vals.peek() == 'd'
    assert stack_3_vals.top.value == 'd'

    # for Empty stack, we expect an exception

    empty = Stack()
    assert empty.peek() == 'this is an empty Stack'
def test_peek_empty():
    s = Stack()
    with pytest.raises(InvalidOperationError) as e:
        s.peek()

    assert str(e.value) == "Method not allowed on empty collection"