Skip to content

Commit fabcacb

Browse files
authored
Membership and members steps implementation
1 parent 4cebb3d commit fabcacb

File tree

13 files changed

+286
-8
lines changed

13 files changed

+286
-8
lines changed

src/main/kotlin/com/pubnub/api/models/consumer/objects/member/PNMember.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ data class PNMember(
1111
) {
1212
data class Partial(
1313
val uuidId: String,
14-
override val custom: Any?,
15-
override val status: String?,
14+
override val custom: Any? = null,
15+
override val status: String? = null,
1616

1717
) : MemberInput {
1818
override val uuid: String = uuidId

src/test/kotlin/com/pubnub/contract/Utils.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package com.pubnub.contract
22

33
import com.google.gson.Gson
44
import com.pubnub.api.models.consumer.objects.channel.PNChannelMetadata
5+
import com.pubnub.api.models.consumer.objects.member.PNMember
6+
import com.pubnub.api.models.consumer.objects.membership.PNChannelMembership
57
import com.pubnub.api.models.consumer.objects.uuid.PNUUIDMetadata
68
import java.io.File
79

@@ -15,3 +17,5 @@ inline fun <reified T> readResourceFromDataFile(dataFileName: String): T = gson.
1517

1618
fun loadPersonaUUIDMetadata(personaName: String): PNUUIDMetadata = readResourceFromDataFile(personaName)
1719
fun loadChannelMetadata(channelName: String): PNChannelMetadata = readResourceFromDataFile(channelName)
20+
fun loadChannelMembership(membershipName: String): PNChannelMembership = readResourceFromDataFile(membershipName)
21+
fun loadMember(memberName: String): PNMember = readResourceFromDataFile(memberName)

src/test/kotlin/com/pubnub/contract/channelmetadata/state/ChannelMetadataState.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@ import com.pubnub.api.models.consumer.objects.channel.PNChannelMetadata
55
class ChannelMetadataState {
66
var channelMetadatas: Collection<PNChannelMetadata>? = null
77
var channelMetadata: PNChannelMetadata? = null
8-
var channelId: String? = null
8+
lateinit var channelId: String
99
var name: String? = null
1010
}

src/test/kotlin/com/pubnub/contract/channelmetadata/step/GivenSteps.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,9 @@ package com.pubnub.contract.channelmetadata.step
22

33
import com.pubnub.contract.channelmetadata.state.ChannelMetadataState
44
import com.pubnub.contract.loadChannelMetadata
5-
import com.pubnub.contract.state.World
65
import io.cucumber.java.en.Given
76

87
class GivenSteps(
9-
private val world: World,
108
private val channelMetadataState: ChannelMetadataState
119
) {
1210

src/test/kotlin/com/pubnub/contract/channelmetadata/step/WhenSteps.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ class WhenSteps(
1111

1212
@When("I get the channel metadata")
1313
fun i_get_the_channel_metadata() {
14-
world.pubnub.getChannelMetadata(channel = channelMetadataState.channelId!!).sync()?.let {
14+
world.pubnub.getChannelMetadata(channel = channelMetadataState.channelId).sync()?.let {
1515
channelMetadataState.channelMetadata = it.data
1616
world.responseStatus = it.status
1717
}
@@ -36,7 +36,7 @@ class WhenSteps(
3636
@When("I get the channel metadata with custom")
3737
fun i_get_the_channel_metadata_with_custom() {
3838
world.pubnub.getChannelMetadata(
39-
channel = channelMetadataState.channelId!!, includeCustom = true
39+
channel = channelMetadataState.channelId, includeCustom = true
4040
).sync()?.let {
4141
channelMetadataState.channelMetadata = it.data
4242
world.responseStatus = it.status
@@ -46,7 +46,7 @@ class WhenSteps(
4646
@When("I remove the channel metadata")
4747
fun i_remove_the_channel_metadata() {
4848
world.responseStatus = world.pubnub.removeChannelMetadata(
49-
channel = channelMetadataState.channelId!!
49+
channel = channelMetadataState.channelId
5050
).sync()?.status
5151
}
5252

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.pubnub.contract.member.state
2+
3+
import com.pubnub.api.models.consumer.objects.member.PNMember
4+
import com.pubnub.contract.channelmetadata.state.ChannelMetadataState
5+
6+
class MemberState(
7+
private val channelMetadataState: ChannelMetadataState
8+
) {
9+
fun channelId(): String = channelMetadataState.channelId
10+
lateinit var member: PNMember
11+
lateinit var members: Collection<PNMember>
12+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.pubnub.contract.member.step
2+
3+
import com.pubnub.contract.loadMember
4+
import com.pubnub.contract.member.state.MemberState
5+
import io.cucumber.java.en.Given
6+
7+
class GivenSteps(
8+
private val memberState: MemberState,
9+
) {
10+
11+
@Given("the data for {string} member")
12+
fun the_data_for_member(memberName: String) {
13+
memberState.member = loadMember(memberName)
14+
}
15+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.pubnub.contract.member.step
2+
3+
import com.pubnub.contract.loadMember
4+
import com.pubnub.contract.member.state.MemberState
5+
import io.cucumber.java.en.Then
6+
import org.hamcrest.MatcherAssert.assertThat
7+
import org.hamcrest.Matchers
8+
9+
class ThenSteps(
10+
private val memberState: MemberState,
11+
) {
12+
@Then("the response contains list with {string} and {string} members")
13+
fun the_response_contains_list_with_and_members(firstMemberName: String, secondMemberName: String) {
14+
val firstMember = loadMember(firstMemberName)
15+
val secondMember = loadMember(secondMemberName)
16+
assertThat(memberState.members, Matchers.containsInAnyOrder(firstMember, secondMember))
17+
}
18+
19+
@Then("the response contains list with {string} member")
20+
fun the_response_contains_list_with_member(memberName: String) {
21+
val member = loadMember(memberName)
22+
assertThat(memberState.members, Matchers.containsInAnyOrder(member))
23+
}
24+
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package com.pubnub.contract.member.step
2+
3+
import com.pubnub.api.models.consumer.objects.member.PNMember
4+
import com.pubnub.api.models.consumer.objects.member.PNUUIDDetailsLevel
5+
import com.pubnub.contract.member.state.MemberState
6+
import com.pubnub.contract.state.World
7+
import io.cucumber.java.en.When
8+
9+
class WhenSteps(
10+
private val world: World,
11+
private val memberState: MemberState,
12+
) {
13+
14+
@When("I get the channel members")
15+
fun i_get_the_channel_members() {
16+
world.pubnub.getChannelMembers(channel = memberState.channelId()).sync()?.let {
17+
memberState.members = it.data
18+
world.responseStatus = it.status
19+
}
20+
}
21+
22+
@When("I set a channel member including custom and UUID with custom")
23+
fun i_set_a_channel_member_including_custom_and_uuid_with_custom() {
24+
val memberInput = PNMember.Partial(uuidId = memberState.member.uuid?.id!!)
25+
world.pubnub.setChannelMembers(
26+
channel = memberState.channelId(),
27+
includeCustom = true,
28+
includeUUIDDetails = PNUUIDDetailsLevel.UUID_WITH_CUSTOM,
29+
uuids = listOf(memberInput)
30+
).sync()?.let {
31+
memberState.members = it.data
32+
world.responseStatus = it.status
33+
}
34+
}
35+
36+
@When("I get the channel members including custom and UUID custom information")
37+
fun i_get_the_channel_members_including_custom_and_uuid_custom_information() {
38+
world.pubnub.getChannelMembers(
39+
channel = memberState.channelId(),
40+
includeCustom = true,
41+
includeUUIDDetails = PNUUIDDetailsLevel.UUID_WITH_CUSTOM
42+
).sync()?.let {
43+
memberState.members = it.data
44+
world.responseStatus = it.status
45+
}
46+
}
47+
48+
@When("I set a channel member")
49+
fun i_set_a_channel_member() {
50+
val memberInput = PNMember.Partial(uuidId = memberState.member.uuid?.id!!)
51+
world.pubnub.setChannelMembers(
52+
channel = memberState.channelId(),
53+
uuids = listOf(memberInput)
54+
).sync()?.let {
55+
memberState.members = it.data
56+
world.responseStatus = it.status
57+
}
58+
}
59+
60+
@When("I remove a channel member")
61+
fun i_remove_a_channel_member() {
62+
world.pubnub.removeChannelMembers(
63+
channel = memberState.channelId(),
64+
uuids = listOf(memberState.member.uuid?.id!!)
65+
).sync()?.let {
66+
memberState.members = it.data
67+
world.responseStatus = it.status
68+
}
69+
}
70+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.pubnub.contract.uuidmetadata.state
2+
3+
import com.pubnub.api.models.consumer.objects.membership.PNChannelMembership
4+
5+
class MembershipState(
6+
private val uuidMetadataState: UUIDMetadataState
7+
) {
8+
fun uuid(): String? = uuidMetadataState.uuid
9+
lateinit var membership: PNChannelMembership
10+
lateinit var memberships: Collection<PNChannelMembership>
11+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.pubnub.contract.membership.step
2+
3+
import com.pubnub.contract.loadChannelMembership
4+
import com.pubnub.contract.uuidmetadata.state.MembershipState
5+
import io.cucumber.java.en.Given
6+
7+
class GivenSteps(
8+
private val membershipState: MembershipState,
9+
) {
10+
11+
@Given("the data for {string} membership")
12+
fun the_data_for_membership(channelMembershipName: String) {
13+
membershipState.membership = loadChannelMembership(channelMembershipName)
14+
}
15+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.pubnub.contract.membership.step
2+
3+
import com.pubnub.contract.loadChannelMembership
4+
import com.pubnub.contract.uuidmetadata.state.MembershipState
5+
import io.cucumber.java.en.Then
6+
import org.hamcrest.MatcherAssert.assertThat
7+
import org.hamcrest.Matchers.containsInAnyOrder
8+
9+
class ThenSteps(
10+
private val membershipState: MembershipState,
11+
) {
12+
@Then("the response contains list with {string} and {string} memberships")
13+
fun the_response_contains_list_with_and_memberships(
14+
firstChannelMembershipName: String,
15+
secondChannelMembershipName: String
16+
) {
17+
val firstChannelMembership = loadChannelMembership(firstChannelMembershipName)
18+
val secondChannelMembership = loadChannelMembership(secondChannelMembershipName)
19+
20+
assertThat(membershipState.memberships, containsInAnyOrder(firstChannelMembership, secondChannelMembership))
21+
}
22+
23+
@Then("the response contains list with {string} membership")
24+
fun the_response_contains_list_with_and_membership(
25+
firstChannelMembershipName: String,
26+
) {
27+
val firstChannelMembership = loadChannelMembership(firstChannelMembershipName)
28+
29+
assertThat(membershipState.memberships, containsInAnyOrder(firstChannelMembership))
30+
}
31+
}
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
package com.pubnub.contract.membership.step
2+
3+
import com.pubnub.api.models.consumer.objects.membership.PNChannelDetailsLevel
4+
import com.pubnub.api.models.consumer.objects.membership.PNChannelMembership
5+
import com.pubnub.contract.state.World
6+
import com.pubnub.contract.uuidmetadata.state.MembershipState
7+
import io.cucumber.java.en.When
8+
9+
class WhenSteps(
10+
private val world: World,
11+
private val membershipState: MembershipState
12+
) {
13+
@When("I get the memberships")
14+
fun i_get_the_memberships() {
15+
world.pubnub.getMemberships(uuid = membershipState.uuid()).sync()?.let {
16+
membershipState.memberships = it.data
17+
world.responseStatus = it.status
18+
}
19+
}
20+
21+
@When("I get the memberships for current user")
22+
fun i_get_the_memberships_for_current_user() {
23+
world.pubnub.getMemberships().sync()?.let {
24+
membershipState.memberships = it.data
25+
world.responseStatus = it.status
26+
}
27+
}
28+
29+
@When("I get the memberships including custom and channel custom information")
30+
fun i_get_the_memberships_including_custom_and_channel_custom_information() {
31+
world.pubnub.getMemberships(
32+
uuid = membershipState.uuid(),
33+
includeCustom = true,
34+
includeChannelDetails = PNChannelDetailsLevel.CHANNEL_WITH_CUSTOM
35+
).sync()?.let {
36+
membershipState.memberships = it.data
37+
world.responseStatus = it.status
38+
}
39+
}
40+
41+
@When("I set the membership")
42+
fun i_set_the_membership() {
43+
val channelMembershipInput = membershipState.membership.let {
44+
PNChannelMembership.Partial(
45+
channelId = it.channel!!.id,
46+
custom = it.custom,
47+
status = it.status
48+
)
49+
}
50+
51+
world.pubnub.setMemberships(
52+
uuid = membershipState.uuid(),
53+
channels = listOf(channelMembershipInput),
54+
).sync()?.let {
55+
world.responseStatus = it.status
56+
membershipState.memberships = it.data
57+
}
58+
}
59+
60+
@When("I set the membership for current user")
61+
fun i_set_the_membershipfor_current_user() {
62+
val channelMembershipInput = membershipState.membership.let {
63+
PNChannelMembership.Partial(
64+
channelId = it.channel!!.id,
65+
custom = it.custom,
66+
status = it.status
67+
)
68+
}
69+
70+
world.pubnub.setMemberships(
71+
channels = listOf(channelMembershipInput),
72+
).sync()?.let {
73+
world.responseStatus = it.status
74+
membershipState.memberships = it.data
75+
}
76+
}
77+
78+
@When("I remove the membership")
79+
fun i_remove_the_membership() {
80+
world.pubnub.removeMemberships(
81+
uuid = membershipState.uuid(),
82+
channels = listOf(membershipState.membership.channel?.id!!),
83+
).sync()?.let {
84+
world.responseStatus = it.status
85+
membershipState.memberships = it.data
86+
}
87+
}
88+
89+
@When("I remove the membership for current user")
90+
fun i_remove_the_membership_for_current_user() {
91+
world.pubnub.removeMemberships(
92+
channels = listOf(membershipState.membership.channel?.id!!),
93+
).sync()?.let {
94+
world.responseStatus = it.status
95+
membershipState.memberships = it.data
96+
}
97+
}
98+
}

0 commit comments

Comments
 (0)