       end
     end
 
+    test "passing CLIENT REPLY commands causes an error", %{conn: c} do
+      assert_raise ArgumentError, ~r{CLIENT REPLY commands are forbidden}, fn ->
+        Redix.pipeline(c, [["CLIENT", "REPLY", "ON"]])
+      end
+    end
+
     test "timeout", %{conn: c} do
       assert {:error, %ConnectionError{reason: :timeout}} =
                Redix.pipeline(c, [~w(PING), ~w(PING)], timeout: 0)

      commands = [~w(INCR noreply_pl_mykey), ~w(INCR noreply_pl_mykey)]
      assert Redix.noreply_pipeline(conn, commands) == :ok
      assert Redix.command!(conn, ~w(GET noreply_pl_mykey)) == "2"
    end

    test "noreply_command/3", %{conn: conn} do
      assert Redix.noreply_command(conn, ["SET", "noreply_cmd_mykey", "myvalue"]) == :ok
      assert Redix.command!(conn, ["GET", "noreply_cmd_mykey"]) == "myvalue"
    end
  end


    test "non-bang version", %{conn: conn} do
      commands = [~w(SET transaction_pipeline_key 1), ~w(GET transaction_pipeline_key)]
      assert Redix.transaction_pipeline(conn, commands) == {:ok, ["OK", "1"]}

      assert Redix.transaction_pipeline(conn, commands, timeout: 0) ==
               {:error, %ConnectionError{reason: :timeout}}
    end

    test "bang version", %{conn: conn} do
      commands = [~w(SET transaction_pipeline_key 1), ~w(GET transaction_pipeline_key)]
      assert Redix.transaction_pipeline!(conn, commands) == ["OK", "1"]

      assert_raise Redix.ConnectionError, fn ->
        Redix.transaction_pipeline!(conn, commands, timeout: 0)
      end
    end
  end

