From 7c1a4c4eadf5929ae7a4c6db687314d864ac3552 Mon Sep 17 00:00:00 2001 From: The Major Date: Sat, 17 Aug 2024 16:03:12 +0000 Subject: [PATCH] update/1 on a missing guild should not crash the cache --- lib/nostrum/cache/guild_cache/ets.ex | 16 +++++++++++----- test/nostrum/cache/guild_cache_meta_test.exs | 9 +++++++++ 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/lib/nostrum/cache/guild_cache/ets.ex b/lib/nostrum/cache/guild_cache/ets.ex index 0eccf6904..fa5d98e00 100644 --- a/lib/nostrum/cache/guild_cache/ets.ex +++ b/lib/nostrum/cache/guild_cache/ets.ex @@ -68,13 +68,19 @@ defmodule Nostrum.Cache.GuildCache.ETS do @doc "Update the given guild in the cache." @impl GuildCache - @spec update(map()) :: {Guild.t(), Guild.t()} + @spec update(map()) :: {Guild.t() | nil, Guild.t()} def update(payload) do - [{_id, old_guild}] = :ets.lookup(@table_name, payload.id) casted = Util.cast(payload, {:struct, Guild}) - new_guild = Guild.merge(old_guild, casted) - true = :ets.update_element(@table_name, payload.id, {2, new_guild}) - {old_guild, new_guild} + + case :ets.lookup(@table_name, payload.id) do + [{_id, old_guild}] -> + new_guild = Guild.merge(old_guild, casted) + true = :ets.update_element(@table_name, payload.id, {2, new_guild}) + {old_guild, new_guild} + + [] -> + {nil, casted} + end end @doc "Delete the given guild from the cache." diff --git a/test/nostrum/cache/guild_cache_meta_test.exs b/test/nostrum/cache/guild_cache_meta_test.exs index 03e55d69e..80b24fbce 100644 --- a/test/nostrum/cache/guild_cache_meta_test.exs +++ b/test/nostrum/cache/guild_cache_meta_test.exs @@ -70,6 +70,15 @@ defmodule Nostrum.Cache.GuildCacheMetaTest do expected = Guild.to_struct(@test_guild) assert ^expected = @cache.create(@test_guild) end + + test "update/1 returns {nil, guild}" do + expected = Guild.to_struct(@test_guild) + assert {nil, ^expected} = @cache.update(@test_guild) + end + + test "delete/1 returns nil" do + assert nil == @cache.delete(@test_guild.id) + end end describe "with cached guild" do