< Summary

Class:DCLServices.CameraReelService.CameraReelWebRequestClient
Assembly:CameraReelNetworkService
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLServices/CameraReelService/CameraReelWebRequestClient.cs
Covered lines:7
Uncovered lines:43
Coverable lines:50
Total lines:158
Line coverage:14% (7 of 50)
Covered branches:0
Total branches:0
Covered methods:2
Total methods:7
Method coverage:28.5% (2 of 7)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
CameraReelWebRequestClient(...)0%550100%
IsProdEnv()0%110100%
GetUserGalleryStorageInfoRequest()0%30500%
GetScreenshotGalleryRequest()0%56700%
UploadScreenshotRequest()0%20400%
DeleteScreenshotRequest()0%30500%
ResponseSanityCheck(...)0%30500%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLServices/CameraReelService/CameraReelWebRequestClient.cs

#LineLine coverage
 1using Cysharp.Threading.Tasks;
 2using DCL;
 3using DCL.Helpers;
 4using DCLServices.EnvironmentProvider;
 5using System;
 6using System.Collections.Generic;
 7using System.Threading;
 8using UnityEngine;
 9using UnityEngine.Networking;
 10
 11namespace DCLServices.CameraReelService
 12{
 13    public class CameraReelWebRequestClient : ICameraReelNetworkClient
 14    {
 15        private readonly IWebRequestController webRequestController;
 16        private readonly IEnvironmentProviderService environmentProviderService;
 17
 18        private readonly string imageBaseURL;
 19        private readonly string userBaseURL;
 20
 42521        public CameraReelWebRequestClient(IWebRequestController webRequestController,
 22            IEnvironmentProviderService environmentProviderService)
 23        {
 42524            this.webRequestController = webRequestController;
 42525            this.environmentProviderService = environmentProviderService;
 26
 42527            imageBaseURL = $"https://camera-reel-service.decentraland.{(IsProdEnv() ? "org" : "zone")}/api/images";
 42528            userBaseURL = $"https://camera-reel-service.decentraland.{(IsProdEnv() ? "org" : "zone")}/api/users";
 42529        }
 30
 31        private bool IsProdEnv() =>
 85032            environmentProviderService.IsProd();
 33
 34        public async UniTask<CameraReelStorageResponse> GetUserGalleryStorageInfoRequest(string userAddress, Cancellatio
 35        {
 036            UnityWebRequest result = await webRequestController.GetAsync($"{userBaseURL}/{userAddress}", isSigned: true,
 37
 038            if (result.result != UnityWebRequest.Result.Success)
 039                throw new Exception($"Error fetching user gallery storage info :\n{result.error}");
 40
 041            CameraReelStorageResponse responseData = Utils.SafeFromJson<CameraReelStorageResponse>(result.downloadHandle
 42
 043            if (responseData == null)
 044                throw new Exception($"Error parsing gallery storage info response:\n{result.downloadHandler.text}");
 45
 046            return responseData;
 047        }
 48
 49        public async UniTask<CameraReelResponses> GetScreenshotGalleryRequest(string userAddress, int limit, int offset,
 50        {
 051            UnityWebRequest result = await webRequestController.GetAsync($"{userBaseURL}/{userAddress}/images?limit={lim
 52
 053            if (result.result != UnityWebRequest.Result.Success)
 054                throw new Exception($"Error fetching user screenshots gallery :\n{result.error}");
 55
 056            CameraReelResponses responseData = Utils.SafeFromJson<CameraReelResponses>(result.downloadHandler.text);
 57
 058            if (responseData == null)
 059                throw new Exception($"Error parsing screenshots gallery response:\n{result.downloadHandler.text}");
 60
 061            foreach (CameraReelResponse response in responseData.images)
 062                ResponseSanityCheck(response, result.downloadHandler.text);
 63
 064            return responseData;
 065        }
 66
 67        public async UniTask<CameraReelUploadResponse> UploadScreenshotRequest(byte[] image, ScreenshotMetadata metadata
 68        {
 069            var formData = new List<IMultipartFormSection>
 70            {
 71                new MultipartFormFileSection("image", image, $"{metadata.dateTime}.jpg", "image/jpeg"),
 72                new MultipartFormDataSection("metadata", JsonUtility.ToJson(metadata)),
 73            };
 74
 075            UnityWebRequest result = await webRequestController.PostAsync(imageBaseURL, formData, isSigned: true, cancel
 76
 077            CameraReelUploadResponse response = Utils.SafeFromJson<CameraReelUploadResponse>(result.downloadHandler.text
 78
 079            if (response == null)
 080                throw new Exception($"Error parsing screenshot response:\n{result.downloadHandler.text}");
 81
 082            ResponseSanityCheck(response.image, result.downloadHandler.text);
 83
 084            return response;
 085        }
 86
 87        public async UniTask<CameraReelStorageResponse> DeleteScreenshotRequest(string uuid, CancellationToken ct)
 88        {
 089            UnityWebRequest result = await webRequestController.DeleteAsync($"{imageBaseURL}/{uuid}", isSigned: true, ca
 90
 091            if (result.result != UnityWebRequest.Result.Success)
 092                throw new Exception($"error during deleting screenshot from the gallery:\n{result.error}");
 93
 094            CameraReelStorageResponse response = Utils.SafeFromJson<CameraReelStorageResponse>(result.downloadHandler.te
 95
 096            if (response == null)
 097                throw new Exception($"Error parsing screenshot delete response:\n{result.downloadHandler.text}");
 98
 099            return response;
 0100        }
 101
 102        private static void ResponseSanityCheck(CameraReelResponse response, string downloadHandlerText)
 103        {
 0104            if (response == null)
 0105                throw new Exception($"Error parsing screenshot response:\n{downloadHandlerText}");
 106
 0107            if (string.IsNullOrEmpty(response.url))
 0108                throw new Exception($"No screenshot image url info retrieved:\n{downloadHandlerText}");
 109
 0110            if (string.IsNullOrEmpty(response.thumbnailUrl))
 0111                throw new Exception($"No screenshot thumbnail url info retrieved:\n{downloadHandlerText}");
 112
 0113            if (response.metadata == null)
 0114                throw new Exception($"No screenshot metadata info retrieved:\n{downloadHandlerText}");
 0115        }
 116    }
 117
 118    [Serializable]
 119    public class CameraReelResponses
 120    {
 121        public List<CameraReelResponse> images = new ();
 122        public int currentImages;
 123        public int maxImages;
 124    }
 125
 126    [Serializable]
 127    public class CameraReelResponse
 128    {
 129        public string id;
 130        public string url;
 131        public string thumbnailUrl;
 132
 133        public ScreenshotMetadata metadata;
 134    }
 135
 136    [Serializable]
 137    public class CameraReelUploadResponse
 138    {
 139        public int currentImages;
 140        public int maxImages;
 141
 142        public CameraReelResponse image;
 143    }
 144
 145    [Serializable]
 146    public class CameraReelStorageResponse
 147    {
 148        public int currentImages;
 149        public int maxImages;
 150    }
 151
 152    [Serializable]
 153    public class CameraReelErrorResponse
 154    {
 155        public string message;
 156        public string reason;
 157    }
 158}