Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
db90147
HEEDLS-374 Set up basic form for editing centre details
davidm-m Jun 18, 2021
adda229
HEEDLS-374 Enabled saving centre details
davidm-m Jun 18, 2021
6fc3d7d
HEEDLS-374 Added resize methods for centre images
davidm-m Jun 18, 2021
5632144
HEEDLS-374 Fix minor display issues
davidm-m Jun 18, 2021
e2feb02
HEEDLS-374 Fix CentreConfigurationController tests
davidm-m Jun 18, 2021
8d3f7be
HEEDLS-374 Added tests for CentreConfigurationController
davidm-m Jun 24, 2021
bf41651
HEEDLS-374 Added and updated tests and made NotifyEmail optional
davidm-m Jun 30, 2021
152e2e6
Merge branch 'master' into HEEDLS-374-edit-centre
davidm-m Jun 30, 2021
47eb9a0
HEEDLS-374 Cleaned up Centre Configuration page html and matched spac…
davidm-m Jul 15, 2021
312e08a
HEEDLS-374 Added extension methods to ModelState
davidm-m Jul 15, 2021
f52e4df
HEEDLS-374 Made ImageResizeService more intuitive
davidm-m Jul 15, 2021
977bd7b
HEEDLS-374 Renamed method
davidm-m Jul 15, 2021
bbe27e0
HEEDLS-374 Added tests for all actions on EditCentreDetails
davidm-m Jul 15, 2021
6827427
HEEDLS-374 Test that UpdateCentreDetails saves CentreLogo and Signatu…
davidm-m Jul 15, 2021
7285a70
Merge branch master into HEEDLS-374
DanBloxham-sw Jul 15, 2021
e7a7cf4
HEEDLS-374 - made centre logo alt text capitalisation consistent
DanBloxham-sw Jul 15, 2021
ceda538
HEEDLS-374 - fix spacing on EditCentreDetails h1
DanBloxham-sw Jul 15, 2021
0894170
HEEDLS-374 - remove redundant model validation checks in registration…
DanBloxham-sw Jul 15, 2021
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
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,38 @@ public void UpdateCentreWebsiteDetails_updates_centre()
}
}

[Test]
public void UpdateCentreDetails_updates_centre()
{
using var transaction = new TransactionScope();
try
{
// Given
const string notifyEmail = "test@centre.com";
const string bannerText = "Test banner text";
var signature = new byte[100];
var logo = new byte[200];


// When
centresDataService.UpdateCentreDetails(2, notifyEmail, bannerText, signature, logo);
var updatedCentre = centresDataService.GetCentreDetailsById(2)!;

// Then
using (new AssertionScope())
{
updatedCentre.NotifyEmail.Should().BeEquivalentTo(notifyEmail);
updatedCentre.BannerText.Should().BeEquivalentTo(bannerText);
updatedCentre.SignatureImage.Should().BeEquivalentTo(signature);
updatedCentre.CentreLogo.Should().BeEquivalentTo(logo);
}
}
finally
{
transaction.Dispose();
}
}

[Test]
public void GetCentreAutoRegisterValues_should_return_correct_values()
{
Expand Down
34 changes: 34 additions & 0 deletions DigitalLearningSolutions.Data/DataServices/CentresDataService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,14 @@ void UpdateCentreWebsiteDetails(
string? otherInformation
);

void UpdateCentreDetails(
int centreId,
string? notifyEmail,
string bannerText,
byte[]? centreSignature,
byte[]? centreLogo
);

(string firstName, string lastName, string email) GetCentreManagerDetails(int centreId);
string[] GetCentreIpPrefixes(int centreId);
(bool autoRegistered, string? autoRegisterManagerEmail) GetCentreAutoRegisterValues(int centreId);
Expand Down Expand Up @@ -215,6 +223,32 @@ public void UpdateCentreWebsiteDetails(
);
}

public void UpdateCentreDetails(
int centreId,
string? notifyEmail,
string bannerText,
byte[]? centreSignature,
byte[]? centreLogo
)
{
connection.Execute(
@"UPDATE Centres SET
NotifyEmail = @notifyEmail,
BannerText = @bannerText,
SignatureImage = @centreSignature,
CentreLogo = @centreLogo
WHERE CentreId = @centreId",
new
{
notifyEmail,
bannerText,
centreSignature,
centreLogo,
centreId
}
);
}

public (string firstName, string lastName, string email) GetCentreManagerDetails(int centreId)
{
var info = connection.QueryFirstOrDefault<(string, string, string)>(
Expand Down
43 changes: 41 additions & 2 deletions DigitalLearningSolutions.Data/Services/ImageResizeService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,13 @@
using System.Drawing.Imaging;
using System.IO;
using Microsoft.AspNetCore.Http;
using Org.BouncyCastle.Crypto.Tls;

public interface IImageResizeService
{
public byte[] ResizeProfilePicture(IFormFile formProfileImage);

public byte[] ResizeCentreImage(IFormFile formCentreImage);
}

public class ImageResizeService : IImageResizeService
Expand All @@ -22,6 +25,14 @@ public byte[] ResizeProfilePicture(IFormFile formProfileImage)
return SquareImageFromMemoryStream(memoryStream, 300);
}

public byte[] ResizeCentreImage(IFormFile formCentreImage)
{
using var memoryStream = new MemoryStream();
formCentreImage.CopyTo(memoryStream);

return ResizedImageFromMemoryStream(memoryStream, 500);
}

private byte[] SquareImageFromMemoryStream(MemoryStream memoryStream, int targetSideLengthPx)
{
using var image = Image.FromStream(memoryStream);
Expand All @@ -35,6 +46,17 @@ private byte[] SquareImageFromMemoryStream(MemoryStream memoryStream, int target
return result.ToArray();
}

private byte[] ResizedImageFromMemoryStream(MemoryStream memoryStream, int maxSideLengthPx)
{
using var image = Image.FromStream(memoryStream);

using var resizedImage = ResizeImageByMaxSideLength(image, maxSideLengthPx);

using var result = new MemoryStream();
resizedImage.Save(result, ImageFormat.Jpeg);
return result.ToArray();
}

private Image CropImageToCentredSquare(Image image)
{
var minSideLength = Math.Min(image.Height, image.Width);
Expand Down Expand Up @@ -67,8 +89,25 @@ private Image CropImageToCentredSquare(Image image)

private Image ResizeSquareImage(Image image, int sideLengthPx)
{
var destRect = new Rectangle(0, 0, sideLengthPx, sideLengthPx);
var returnImage = new Bitmap(sideLengthPx, sideLengthPx);
return ResizeImageToDimensions(image, sideLengthPx, sideLengthPx);
}

private Image ResizeImageByMaxSideLength(Image image, int maxSideLengthPx)
{
var longestSideLengthPx = Math.Max(image.Width, image.Height);
// No need to resize if image is smaller than the max size
var ratio = Math.Min((float)maxSideLengthPx / (float)longestSideLengthPx, 1);

var newWidth = (int)(image.Width * ratio);
var newHeight = (int)(image.Height * ratio);

return ResizeImageToDimensions(image, newWidth, newHeight);
}

private Image ResizeImageToDimensions(Image image, int widthPx, int heightPx)
{
var destRect = new Rectangle(0, 0, widthPx, heightPx);
var returnImage = new Bitmap(widthPx, heightPx);

returnImage.SetResolution(image.HorizontalResolution, image.VerticalResolution);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ public void Page_has_no_accessibility_errors(string url, string pageTitle)
[InlineData("/TrackingSystem/Centre/Ranking", "Centre ranking")]
[InlineData("/TrackingSystem/Centre/ContractDetails", "Contract details")]
[InlineData("/TrackingSystem/CentreConfiguration", "Centre configuration")]
[InlineData("/TrackingSystem/CentreConfiguration/EditCentreDetails", "Edit centre details")]
[InlineData("/TrackingSystem/CentreConfiguration/EditCentreManagerDetails", "Edit centre manager details")]
[InlineData(
"/TrackingSystem/CentreConfiguration/EditCentreWebsiteDetails",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ public void EditDetailsPostSave_for_admin_user_with_missing_delegate_answers_doe
}

[Test]
public void EditDetailsPostSave_with_profile_image_fails_validation()
public void EditDetailsPostSave_without_previewing_profile_image_fails_validation()
{
// Given
var myAccountController = new MyAccountController(
Expand Down
Loading