Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F13521642
power-levels-desc-test.cpp
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Award Token
Flag For Later
Size
6 KB
Referenced Files
None
Subscribers
None
power-levels-desc-test.cpp
View Options
/*
* This file is part of libkazv.
* SPDX-FileCopyrightText: 2020-2023 tusooa <tusooa@kazv.moe>
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
#include
<libkazv-config.hpp>
#include
<catch2/catch_test_macros.hpp>
#include
<types.hpp>
#include
<factory.hpp>
#include
<power-levels-desc.hpp>
using
namespace
Kazv
;
using
namespace
Kazv
::
Factory
;
static
auto
examplePowerLevelsJson
=
R
"
(
{
"ban": 10,
"events": {
"m.room.message": 20,
"moe.kazv.mxc.some-type": 50
},
"events_default": 1,
"invite": 1,
"kick": 1,
"notifications": {"room": 99},
"redact": 49,
"state_default": 100,
"users": {
"@mew:example.com": 100
},
"users_default": 1
}
)
"
_json
;
static
auto
examplePowerLevels
=
makeEvent
(
withEventType
(
"m.power_levels"
)
|
withStateKey
(
""
)
|
withEventContent
(
examplePowerLevelsJson
)
);
TEST_CASE
(
"Parse Power Levels"
,
"[client][power-levels]"
)
{
auto
powerLevels
=
PowerLevelsDesc
(
examplePowerLevels
);
REQUIRE
(
powerLevels
.
normalizedEvent
().
content
().
get
()
==
examplePowerLevels
.
content
().
get
());
SECTION
(
"additional keys are discarded"
)
{
auto
jsonWithAdditionalKeys
=
examplePowerLevelsJson
;
jsonWithAdditionalKeys
[
"moe.kazv.mxc.something-else"
];
auto
eventWithAdditionalKeys
=
makeEvent
(
withEventType
(
"m.power_levels"
)
|
withStateKey
(
""
)
|
withEventContent
(
jsonWithAdditionalKeys
)
);
auto
powerLevels
=
PowerLevelsDesc
(
eventWithAdditionalKeys
);
REQUIRE
(
powerLevels
.
normalizedEvent
().
content
().
get
()
==
examplePowerLevels
.
content
().
get
());
}
SECTION
(
"additional keys in notifications are discarded"
)
{
auto
jsonWithAdditionalKeys
=
examplePowerLevelsJson
;
jsonWithAdditionalKeys
[
"notifications"
][
"moe.kazv.mxc.something-else"
];
auto
eventWithAdditionalKeys
=
makeEvent
(
withEventType
(
"m.power_levels"
)
|
withStateKey
(
""
)
|
withEventContent
(
jsonWithAdditionalKeys
)
);
auto
powerLevels
=
PowerLevelsDesc
(
eventWithAdditionalKeys
);
REQUIRE
(
powerLevels
.
normalizedEvent
().
content
().
get
()
==
examplePowerLevels
.
content
().
get
());
}
SECTION
(
"string values are converted to numbers"
)
{
auto
jsonWithStringValues
=
examplePowerLevelsJson
;
jsonWithStringValues
[
"ban"
]
=
"10"
;
auto
eventWithStringValues
=
makeEvent
(
withEventType
(
"m.power_levels"
)
|
withStateKey
(
""
)
|
withEventContent
(
jsonWithStringValues
)
);
auto
powerLevels
=
PowerLevelsDesc
(
eventWithStringValues
);
REQUIRE
(
powerLevels
.
normalizedEvent
().
content
().
get
()
==
examplePowerLevels
.
content
().
get
());
}
SECTION
(
"string values that cannot be converted are replaced by default values"
)
{
auto
jsonWithStringValues
=
examplePowerLevelsJson
;
jsonWithStringValues
[
"ban"
]
=
"10s"
;
auto
expected
=
examplePowerLevelsJson
;
expected
[
"ban"
]
=
50
;
auto
eventWithStringValues
=
makeEvent
(
withEventType
(
"m.power_levels"
)
|
withStateKey
(
""
)
|
withEventContent
(
jsonWithStringValues
)
);
auto
powerLevels
=
PowerLevelsDesc
(
eventWithStringValues
);
REQUIRE
(
powerLevels
.
normalizedEvent
().
content
().
get
()
==
expected
);
}
SECTION
(
"string values in events that cannot be converted are replaced by default values"
)
{
auto
jsonWithStringValues
=
examplePowerLevelsJson
;
jsonWithStringValues
[
"events"
][
"ttt"
]
=
"10s"
;
auto
expected
=
examplePowerLevelsJson
;
auto
eventWithStringValues
=
makeEvent
(
withEventType
(
"m.power_levels"
)
|
withStateKey
(
""
)
|
withEventContent
(
jsonWithStringValues
)
);
auto
powerLevels
=
PowerLevelsDesc
(
eventWithStringValues
);
REQUIRE
(
powerLevels
.
normalizedEvent
().
content
().
get
()
==
expected
);
}
SECTION
(
"string values in users that cannot be converted are replaced by default values"
)
{
auto
jsonWithStringValues
=
examplePowerLevelsJson
;
jsonWithStringValues
[
"users"
][
"@ttt:example.com"
]
=
"10s"
;
auto
expected
=
examplePowerLevelsJson
;
auto
eventWithStringValues
=
makeEvent
(
withEventType
(
"m.power_levels"
)
|
withStateKey
(
""
)
|
withEventContent
(
jsonWithStringValues
)
);
auto
powerLevels
=
PowerLevelsDesc
(
eventWithStringValues
);
REQUIRE
(
powerLevels
.
normalizedEvent
().
content
().
get
()
==
expected
);
}
}
TEST_CASE
(
"powerLevelsOfUser()"
,
"[client][power-levels]"
)
{
auto
powerLevels
=
PowerLevelsDesc
(
examplePowerLevels
);
REQUIRE
(
powerLevels
.
powerLevelsOfUser
(
"@mew:example.com"
)
==
100
);
REQUIRE
(
powerLevels
.
powerLevelsOfUser
(
"@mewmew:example.com"
)
==
1
);
SECTION
(
"default power levels object"
)
{
powerLevels
=
PowerLevelsDesc
(
json
::
object
({}));
REQUIRE
(
powerLevels
.
powerLevelsOfUser
(
"@mew:example.com"
)
==
0
);
REQUIRE
(
powerLevels
.
powerLevelsOfUser
(
"@mewmew:example.com"
)
==
0
);
}
}
TEST_CASE
(
"canSendMessage()"
,
"[client][power-levels]"
)
{
auto
powerLevels
=
PowerLevelsDesc
(
examplePowerLevels
);
REQUIRE
(
powerLevels
.
canSendMessage
(
"@mew:example.com"
,
"m.room.message"
));
REQUIRE
(
!
powerLevels
.
canSendMessage
(
"@mewmew:example.com"
,
"m.room.message"
));
REQUIRE
(
powerLevels
.
canSendMessage
(
"@mew:example.com"
,
"m.room.encrypted"
));
REQUIRE
(
powerLevels
.
canSendMessage
(
"@mewmew:example.com"
,
"m.room.encrypted"
));
}
TEST_CASE
(
"canSendState()"
,
"[client][power-levels]"
)
{
auto
powerLevels
=
PowerLevelsDesc
(
examplePowerLevels
);
REQUIRE
(
powerLevels
.
canSendState
(
"@mew:example.com"
,
"moe.kazv.mxc.some-type"
));
REQUIRE
(
!
powerLevels
.
canSendState
(
"@mewmew:example.com"
,
"moe.kazv.mxc.some-type"
));
REQUIRE
(
powerLevels
.
canSendState
(
"@mew:example.com"
,
"moe.kazv.mxc.some-other-type"
));
REQUIRE
(
!
powerLevels
.
canSendState
(
"@mewmew:example.com"
,
"moe.kazv.mxc.some-other-type"
));
}
TEST_CASE
(
"canInvite()"
,
"[client][power-levels]"
)
{
auto
powerLevels
=
PowerLevelsDesc
(
examplePowerLevels
);
REQUIRE
(
powerLevels
.
canInvite
(
"@mew:example.com"
));
REQUIRE
(
powerLevels
.
canInvite
(
"@mewmew:example.com"
));
}
TEST_CASE
(
"canKick()"
,
"[client][power-levels]"
)
{
auto
powerLevels
=
PowerLevelsDesc
(
examplePowerLevels
);
REQUIRE
(
powerLevels
.
canKick
(
"@mew:example.com"
));
REQUIRE
(
powerLevels
.
canKick
(
"@mewmew:example.com"
));
}
TEST_CASE
(
"canBan()"
,
"[client][power-levels]"
)
{
auto
powerLevels
=
PowerLevelsDesc
(
examplePowerLevels
);
REQUIRE
(
powerLevels
.
canBan
(
"@mew:example.com"
));
REQUIRE
(
!
powerLevels
.
canBan
(
"@mewmew:example.com"
));
}
TEST_CASE
(
"canRedact()"
,
"[client][power-levels]"
)
{
auto
powerLevels
=
PowerLevelsDesc
(
examplePowerLevels
);
REQUIRE
(
powerLevels
.
canRedact
(
"@mew:example.com"
));
REQUIRE
(
!
powerLevels
.
canRedact
(
"@mewmew:example.com"
));
}
File Metadata
Details
Attached
Mime Type
text/x-c
Expires
Sun, Dec 7, 8:27 PM (1 h, 40 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
700231
Default Alt Text
power-levels-desc-test.cpp (6 KB)
Attached To
Mode
rL libkazv
Attached
Detach File
Event Timeline
Log In to Comment