From 71b4424c850a94fd8808f901462583c830a70cb5 Mon Sep 17 00:00:00 2001 From: Lexie Date: Tue, 13 Aug 2024 10:44:44 +0200 Subject: [PATCH] use guild role fetch endpoint (#682) --- lib/src/http/managers/role_manager.dart | 17 +++++++++-------- test/unit/http/managers/role_manager_test.dart | 2 -- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/lib/src/http/managers/role_manager.dart b/lib/src/http/managers/role_manager.dart index 2a7f76039..246319588 100644 --- a/lib/src/http/managers/role_manager.dart +++ b/lib/src/http/managers/role_manager.dart @@ -1,7 +1,6 @@ import 'dart:convert'; import 'package:nyxx/src/builders/role.dart'; -import 'package:nyxx/src/errors.dart'; import 'package:nyxx/src/http/managers/manager.dart'; import 'package:nyxx/src/http/request.dart'; import 'package:nyxx/src/http/route.dart'; @@ -69,14 +68,16 @@ class RoleManager extends Manager { @override Future fetch(Snowflake id) async { - // There isn't an endpoint to fetch a single role. Re-fetch all the roles to ensure they are up to date, - // and return the matching role. - final roles = await list(); + final route = HttpRoute() + ..guilds(id: guildId.toString()) + ..roles(id: id.toString()); - return roles.firstWhere( - (role) => role.id == id, - orElse: () => throw RoleNotFoundException(guildId, id), - ); + final request = BasicRequest(route); + final response = await client.httpHandler.executeSafe(request); + final role = parse(response.jsonBody as Map); + + client.updateCacheWith(role); + return role; } @override diff --git a/test/unit/http/managers/role_manager_test.dart b/test/unit/http/managers/role_manager_test.dart index 89356ed95..25c990ce1 100644 --- a/test/unit/http/managers/role_manager_test.dart +++ b/test/unit/http/managers/role_manager_test.dart @@ -38,8 +38,6 @@ void main() { RegExp(r'/guilds/0/roles(/\d+)?'), '/guilds/0/roles', sampleObject: sampleRole, - // Fetch implementation internally uses `list()`, so we return a list - fetchObjectOverride: [sampleRole], sampleMatches: checkRole, additionalParsingTests: [], additionalEndpointTests: [