public override async Task DeleteImageAsync(string fileKey, ImageRules rules) { var deleteRequest = new DeleteObjectRequest { BucketName = bucketName, Key = $"{environment}/{rules.Folder}/{fileKey}" }; await s3Client.DeleteObjectAsync(deleteRequest); }
public async Task <string> ReplaceImageAsync(string oldKey, IFormFile image, ImageRules rules) { if (!string.IsNullOrWhiteSpace(oldKey)) { await DeleteImageAsync(oldKey, rules); } return(await UploadImageAsync(image, rules)); }
public async Task ReplaceImage_NoOldKey_DeleteNotCalled() { var image = Substitute.For <IFormFile>(); var rules = new ImageRules(0, 0, 0, "", ""); await testObj.ReplaceImageAsync("", image, rules); Assert.AreEqual(0, testObj.deleteCalls); }
public void UploadImage_NotValid_ArgumentException() { var image = Substitute.For <IFormFile>(); image.Length.Returns(2); var rules = new ImageRules(1, 0, 0, "", ""); Assert.ThrowsAsync <ArgumentException>(() => testObj.UploadImageAsync(image, rules)); }
public void GetImageUrl_HasKey_ReturnUrl() { const string missingUrl = "missingURL"; var rules = new ImageRules(1, 1, 1, "folder", missingUrl); var url = testObj.GetImageUrl("Key", rules); Assert.AreNotEqual(missingUrl, url); }
public void GetImageUrl_MissingKey_ReturnMissingUrl(string key) { const string missingUrl = "missingURL"; var rules = new ImageRules(1, 1, 1, "folder", missingUrl); var url = testObj.GetImageUrl(key, rules); Assert.AreEqual(missingUrl, url); }
public override Task DeleteImageAsync(string fileKey, ImageRules rules) { var folderPath = GetFolderPath(rules.Folder); var filePath = Path.Combine(folderPath, fileKey); if (File.Exists(filePath)) { File.Delete(filePath); } return(Task.CompletedTask); }
public string GetUserProfilePicUrl(string id, string imageKey, ImageRules rules) { const int defaultPicturesCount = 24; if (string.IsNullOrWhiteSpace(imageKey)) { var idHash = id.Select(c => (int)c).Sum(); var defaultID = idHash % defaultPicturesCount; return($"/images/profile-default/profile-default-{defaultID}.jpg"); } return(GetImageUrl(imageKey, ClimbImageRules.ProfilePic)); }
public async Task <string> UploadImageAsync(IFormFile image, ImageRules rules) { if (!IsValid(image, rules)) { throw new ArgumentException($"Image size {image.Length:N0}B exceeds limit {rules.MaxSize:N0}B."); } EnsureFolder(rules.Folder); var fileKey = GenerateFileKey(image); await UploadImageInternalAsync(image, rules.Folder, fileKey); return(fileKey); }
private static bool IsValid(IFormFile image, ImageRules rules) { return(image.Length <= rules.MaxSize); }
public string GetImageUrl(string imageKey, ImageRules rules) => string.IsNullOrWhiteSpace(imageKey) ? rules.MissingUrl : $"{root}/{rules.Folder}/{imageKey}";
public abstract Task DeleteImageAsync(string fileKey, ImageRules rules);
public override Task DeleteImageAsync(string fileKey, ImageRules rules) { ++deleteCalls; return(Task.CompletedTask); }