Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions tests/commands/hash/test_hexpireat.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import pytest
import time
from upstash_redis import Redis


@pytest.fixture(autouse=True)
def flush_hash(redis: Redis):
hash_name = "myhash"
redis.delete(hash_name)


def test_hexpireat_sets_expiry(redis: Redis):
hash_name = "myhash"
field = "field1"
value = "value1"

redis.hset(hash_name, field, value)
future_timestamp = int(time.time()) + 2
assert redis.hexpireat(hash_name, field, future_timestamp)[0] == 1

time.sleep(3)
assert redis.hexists(hash_name, field) == 0
38 changes: 38 additions & 0 deletions tests/commands/hash/test_hexpiretime.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import pytest
import time
from upstash_redis import Redis


@pytest.fixture(autouse=True)
def flush_hash(redis: Redis):
hash_name = "myhash"
redis.delete(hash_name)


def test_hexpiretime_returns_correct_expiry(redis: Redis):
hash_name = "myhash"
field = "field1"
value = "value1"

redis.hset(hash_name, field, value)
redis.hexpire(hash_name, field, 5)
expiry_time = redis.hexpiretime(hash_name, [field])[0]

assert expiry_time > int(time.time())
assert expiry_time <= int(time.time()) + 5


def test_hexpiretime_returns_minus1_if_no_expiry(redis: Redis):
hash_name = "myhash"
field = "field1"
value = "value1"

redis.hset(hash_name, field, value)
assert redis.hexpiretime(hash_name, [field])[0] == -1


def test_hexpiretime_returns_minus2_if_field_does_not_exist(redis: Redis):
hash_name = "myhash"
field = "field1"

assert redis.hexpiretime(hash_name, [field])[0] == -2
32 changes: 32 additions & 0 deletions tests/commands/hash/test_hpersist.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import pytest
from upstash_redis import Redis


@pytest.fixture(autouse=True)
def flush_hash(redis: Redis):
hash_name = "myhash"
redis.delete(hash_name)


def test_hpersist_removes_expiry(redis: Redis):
hash_name = "myhash"
field = "field1"
value = "value1"

redis.hset(hash_name, field, value)
redis.hexpire(hash_name, field, 500)
ttl_before = redis.httl(hash_name, field)
assert ttl_before[0] > 0

redis.hpersist(hash_name, field)
ttl_after = redis.httl(hash_name, field)
assert ttl_after == [-1]


def test_hpersist_does_nothing_if_no_expiry(redis: Redis):
hash_name = "myhash"
field = "field1"
value = "value1500"

redis.hset(hash_name, field, value)
assert redis.hpersist(hash_name, field) == [-1]
41 changes: 41 additions & 0 deletions tests/commands/hash/test_hpexpire.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import pytest
import time
from upstash_redis import Redis


@pytest.fixture(autouse=True)
def flush_hash(redis: Redis):
hash_name = "myhash"
redis.delete(hash_name)


def test_hpexpire_sets_expiry_in_milliseconds(redis: Redis):
hash_name = "myhash"
field = "field1"
value = "value1"

redis.hset(hash_name, field, value)
assert redis.hpexpire(hash_name, field, 500) == [1]

time.sleep(1)
assert redis.hget(hash_name, field) is None


def test_hpexpire_does_not_set_expiry_if_field_does_not_exist(redis: Redis):
hash_name = "myhash"
field = "field1"

assert redis.hpexpire(hash_name, field, 500) == [-2]


def test_hpexpire_overwrites_existing_expiry(redis: Redis):
hash_name = "myhash"
field = "field1"
value = "value1"

redis.hset(hash_name, field, value)
redis.hpexpire(hash_name, field, 1000)
assert redis.hpexpire(hash_name, field, 2000) == [1]

time.sleep(2.5)
assert redis.hget(hash_name, field) is None
22 changes: 22 additions & 0 deletions tests/commands/hash/test_hpexpireat.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import pytest
import time
from upstash_redis import Redis


@pytest.fixture(autouse=True)
def flush_hash(redis: Redis):
hash_name = "myhash"
redis.delete(hash_name)


def test_hpexpireat_sets_expiry_in_milliseconds(redis: Redis):
hash_name = "myhash"
field = "field1"
value = "value1"

redis.hset(hash_name, field, value)
future_timestamp_ms = int(time.time() * 1000) + 500
assert redis.hpexpireat(hash_name, field, future_timestamp_ms) == [1]

time.sleep(1)
assert redis.hget(hash_name, field) is None
38 changes: 38 additions & 0 deletions tests/commands/hash/test_hpexpiretime.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import pytest
import time
from upstash_redis import Redis


@pytest.fixture(autouse=True)
def flush_hash(redis: Redis):
hash_name = "myhash"
redis.delete(hash_name)


def test_hpexpiretime_returns_correct_expiry(redis: Redis):
hash_name = "myhash"
field = "field1"
value = "value1"

redis.hset(hash_name, field, value)
redis.hpexpire(hash_name, field, 500)
expiry_time_ms = redis.hpexpiretime(hash_name, [field])[0]

assert expiry_time_ms > 0
assert expiry_time_ms <= int(time.time() * 1000) + 1000


def test_hpexpiretime_returns_minus1_if_no_expiry(redis: Redis):
hash_name = "myhash"
field = "field1"
value = "value1"

redis.hset(hash_name, field, value)
assert redis.hpexpiretime(hash_name, [field])[0] == -1


def test_hpexpiretime_returns_minus2_if_field_does_not_exist(redis: Redis):
hash_name = "myhash"
field = "field1"

assert redis.hpexpiretime(hash_name, [field])[0] == -2
36 changes: 36 additions & 0 deletions tests/commands/hash/test_hpttl.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import pytest
from upstash_redis import Redis


@pytest.fixture(autouse=True)
def flush_hash(redis: Redis):
hash_name = "myhash"
redis.delete(hash_name)


def test_hpttl_returns_correct_ttl(redis: Redis):
hash_name = "myhash"
field = "field1"
value = "value1"

redis.hset(hash_name, field, value)
redis.hpexpire(hash_name, field, 1500)
ttl = redis.hpttl(hash_name, [field])[0]

assert ttl > 0


def test_hpttl_returns_minus1_if_no_expiry(redis: Redis):
hash_name = "myhash"
field = "field1"
value = "value1"

redis.hset(hash_name, field, value)
assert redis.hpttl(hash_name, [field])[0] == -1


def test_hpttl_returns_minus2_if_field_does_not_exist(redis: Redis):
hash_name = "myhash"
field = "field1"

assert redis.hpttl(hash_name, [field])[0] == -2
37 changes: 37 additions & 0 deletions tests/commands/hash/test_httl.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import pytest
from upstash_redis import Redis


@pytest.fixture(autouse=True)
def flush_hash(redis: Redis):
hash_name = "myhash"
redis.delete(hash_name)


def test_httl_returns_correct_ttl(redis: Redis):
hash_name = "myhash"
field = "field1"
value = "value1"

redis.hset(hash_name, field, value)
redis.hexpire(hash_name, field, 5)
ttl = redis.httl(hash_name, [field])[0]

assert ttl > 0
assert ttl <= 5


def test_httl_returns_minus1_if_no_expiry(redis: Redis):
hash_name = "myhash"
field = "field1"
value = "value1"

redis.hset(hash_name, field, value)
assert redis.httl(hash_name, [field])[0] == -1


def test_httl_returns_minus2_if_field_does_not_exist(redis: Redis):
hash_name = "myhash"
field = "field1"

assert redis.httl(hash_name, [field])[0] == -2
Loading