@@ -32,6 +32,8 @@ protected virtual void Dispose(bool disposing)
32
32
}
33
33
34
34
private User _jwtAuthenticatedUser = null ! ;
35
+ private const string FileName = "combine.png" ; // File in Backend.Tests/Assets/
36
+ private readonly string _filePath = Path . Combine ( Util . AssetsDir , FileName ) ;
35
37
36
38
[ SetUp ]
37
39
public void Setup ( )
@@ -48,6 +50,7 @@ public void Setup()
48
50
_userRepo . Create ( _jwtAuthenticatedUser ) ;
49
51
_jwtAuthenticatedUser = _permissionService . Authenticate ( _jwtAuthenticatedUser . Username ,
50
52
_jwtAuthenticatedUser . Password ) . Result ?? throw new UserAuthenticationException ( ) ;
53
+ _avatarController . ControllerContext . HttpContext . Request . Headers [ "UserId" ] = _jwtAuthenticatedUser . Id ;
51
54
}
52
55
53
56
/// <summary> Delete the image file stored on disk for a particular user. </summary>
@@ -62,19 +65,67 @@ private static void DeleteAvatarFile(string userId)
62
65
}
63
66
64
67
[ Test ]
65
- public void TestAvatarImport ( )
68
+ public void TestDownloadAvatarNoUser ( )
66
69
{
67
- const string fileName = "combine.png" ; // file in Backend.Tests/Assets/
68
- var filePath = Path . Combine ( Util . AssetsDir , fileName ) ;
69
- using var stream = File . OpenRead ( filePath ) ;
70
- var file = new FormFile ( stream , 0 , stream . Length , "dave" , fileName ) ;
70
+ var result = _avatarController . DownloadAvatar ( "false-user-id" ) . Result ;
71
+ Assert . That ( result , Is . InstanceOf < NotFoundResult > ( ) ) ;
72
+ }
73
+
74
+ [ Test ]
75
+ public void TestDownloadAvatarNoAvatar ( )
76
+ {
77
+ var result = _avatarController . DownloadAvatar ( _jwtAuthenticatedUser . Id ) . Result ;
78
+ Assert . That ( result , Is . InstanceOf < NotFoundResult > ( ) ) ;
79
+ }
80
+
81
+ [ Test ]
82
+ public void TestUploadAvatarUnauthorizedUser ( )
83
+ {
84
+ using var stream = File . OpenRead ( _filePath ) ;
85
+ var file = new FormFile ( stream , 0 , stream . Length , "formFileName" , FileName ) ;
86
+ _avatarController . ControllerContext . HttpContext = PermissionServiceMock . UnauthorizedHttpContext ( ) ;
71
87
72
- _ = _avatarController . UploadAvatar ( _jwtAuthenticatedUser . Id , file ) . Result ;
88
+ var result = _avatarController . UploadAvatar ( file ) . Result ;
89
+ Assert . That ( result , Is . InstanceOf < ForbidResult > ( ) ) ;
90
+ }
91
+
92
+ [ Test ]
93
+ public void TestUploadAudioFileNullFile ( )
94
+ {
95
+ var result = _avatarController . UploadAvatar ( null ) . Result ;
96
+ Assert . That ( result , Is . InstanceOf < BadRequestObjectResult > ( ) ) ;
97
+ }
98
+
99
+ [ Test ]
100
+ public void TestUploadAudioFileEmptyFile ( )
101
+ {
102
+ using var stream = File . OpenRead ( _filePath ) ;
103
+ // Use 0 for the third argument to simulate an empty file.
104
+ var file = new FormFile ( stream , 0 , 0 , "formFileName" , FileName ) ;
105
+
106
+ var result = _avatarController . UploadAvatar ( file ) . Result ;
107
+ Assert . That ( result , Is . InstanceOf < BadRequestObjectResult > ( ) ) ;
108
+ }
109
+
110
+ [ Test ]
111
+ public void TestUploadAvatarAndDownloadAvatar ( )
112
+ {
113
+ using var stream = File . OpenRead ( _filePath ) ;
114
+ var file = new FormFile ( stream , 0 , stream . Length , "formFileName" , FileName ) ;
115
+ var uploadResult = _avatarController . UploadAvatar ( file ) . Result ;
116
+ Assert . That ( uploadResult , Is . TypeOf < OkResult > ( ) ) ;
73
117
74
118
var foundUser = _userRepo . GetUser ( _jwtAuthenticatedUser . Id ) . Result ;
75
119
Assert . That ( foundUser ? . Avatar , Is . Not . Null ) ;
76
120
121
+ // No permissions should be required to download an avatar.
122
+ _avatarController . ControllerContext . HttpContext = PermissionServiceMock . UnauthorizedHttpContext ( ) ;
123
+
124
+ var fileResult = _avatarController . DownloadAvatar ( _jwtAuthenticatedUser . Id ) . Result as FileStreamResult ;
125
+ Assert . That ( fileResult , Is . TypeOf < FileStreamResult > ( ) ) ;
126
+
77
127
// Clean up.
128
+ fileResult ! . FileStream . Dispose ( ) ;
78
129
DeleteAvatarFile ( _jwtAuthenticatedUser . Id ) ;
79
130
}
80
131
}
0 commit comments