Skip to content

Commit 14fe117

Browse files
authored
Minor subscriber endpoint improvements (#784)
* Rename `GetSubscriber` endpoint as `IndividualSubscriber` * Update subscriber-list.json with plans and add `is_owner_subscribed` field * Remove `Subscriber::email_subscription_id` field * Move subscribers endpoint to subscribers_endpoint for consistency
1 parent 5e2baf6 commit 14fe117

File tree

6 files changed

+113
-113
lines changed

6 files changed

+113
-113
lines changed

wp_api/src/wp_com/client.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use super::endpoint::{
33
JetpackConnectionRequestBuilder, JetpackConnectionRequestExecutor,
44
},
55
oauth2::{Oauth2RequestBuilder, Oauth2RequestExecutor},
6-
subscribers::{SubscribersRequestBuilder, SubscribersRequestExecutor},
6+
subscribers_endpoint::{SubscribersRequestBuilder, SubscribersRequestExecutor},
77
support_bots_endpoint::{SupportBotsRequestBuilder, SupportBotsRequestExecutor},
88
};
99
use crate::{

wp_api/src/wp_com/endpoint.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use strum::IntoEnumIterator;
88

99
pub mod jetpack_connection_endpoint;
1010
pub mod oauth2;
11-
pub mod subscribers;
11+
pub mod subscribers_endpoint;
1212
pub mod support_bots_endpoint;
1313

1414
#[derive(uniffi::Object)]

wp_api/src/wp_com/endpoint/subscribers.rs renamed to wp_api/src/wp_com/endpoint/subscribers_endpoint.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use crate::{
33
wp_com::{
44
WpComNamespace, WpComSiteId,
55
subscribers::{
6-
AddSubscribersParams, AddSubscribersResponse, GetSubscriberParams,
6+
AddSubscribersParams, AddSubscribersResponse, IndividualSubscriberParams,
77
IndividualSubscriberStats, IndividualSubscriberStatsParams, ListSubscribersResponse,
88
Subscriber, SubscriberImportJob, SubscriberImportJobsListParams,
99
SubscriberStatsResponse, SubscribersListParams, UploadId,
@@ -16,8 +16,8 @@ use wp_derive_request_builder::WpDerivedRequest;
1616
enum SubscribersRequest {
1717
#[get(url = "/sites/<wp_com_site_id>/subscribers", params = &SubscribersListParams, output = ListSubscribersResponse)]
1818
ListSubscribers,
19-
#[get(url = "/sites/<wp_com_site_id>/subscribers/individual", params = &GetSubscriberParams, output = Subscriber)]
20-
GetSubscriber,
19+
#[get(url = "/sites/<wp_com_site_id>/subscribers/individual", params = &IndividualSubscriberParams, output = Subscriber)]
20+
IndividualSubscriber,
2121
#[get(url = "/sites/<wp_com_site_id>/individual-subscriber-stats", params = &IndividualSubscriberStatsParams, output = IndividualSubscriberStats)]
2222
IndividualSubscriberStats,
2323
#[get(url = "/sites/<wp_com_site_id>/subscribers/import", params = &SubscriberImportJobsListParams, output = Vec<SubscriberImportJob>)]

wp_api/src/wp_com/subscribers.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ pub struct Subscriber {
1717
pub display_name: String,
1818
pub email_address: String,
1919
pub is_email_subscriber: bool,
20-
pub email_subscription_id: Option<u64>,
2120
pub date_subscribed: WpGmtDateTime,
2221
pub subscription_status: Option<String>,
2322
pub avatar: String,
@@ -174,27 +173,28 @@ pub struct ListSubscribersResponse {
174173
pub page: u64,
175174
pub per_page: u64,
176175
pub subscribers: Vec<Subscriber>,
176+
pub is_owner_subscribed: bool,
177177
}
178178

179179
// MARK: - Get Subscriber
180180

181181
#[derive(Debug, uniffi::Enum)]
182-
pub enum GetSubscriberParams {
182+
pub enum IndividualSubscriberParams {
183183
// Return subscribers that receive notifications via WordPress.com for new posts.
184184
WpCom(UserId),
185185

186186
// Return subscribers that receive notifications via email for new posts.
187187
Email(SubscriptionId),
188188
}
189189

190-
impl AppendUrlQueryPairs for GetSubscriberParams {
190+
impl AppendUrlQueryPairs for IndividualSubscriberParams {
191191
fn append_query_pairs(&self, query_pairs_mut: &mut QueryPairs) {
192192
match self {
193-
GetSubscriberParams::WpCom(user_id) => {
193+
IndividualSubscriberParams::WpCom(user_id) => {
194194
query_pairs_mut.append_pair("user_id", &user_id.to_string());
195195
query_pairs_mut.append_pair("type", "wpcom");
196196
}
197-
GetSubscriberParams::Email(email) => {
197+
IndividualSubscriberParams::Email(email) => {
198198
query_pairs_mut.append_pair("subscription_id", &email.to_string());
199199
query_pairs_mut.append_pair("type", "email");
200200
}
@@ -440,11 +440,11 @@ mod tests {
440440
let response: ListSubscribersResponse =
441441
serde_json::from_reader(file).expect("Unable to parse JSON");
442442

443-
assert_eq!(response.total, 8);
443+
assert_eq!(response.total, 4);
444444
assert_eq!(response.pages, 1);
445445
assert_eq!(response.page, 1);
446446
assert_eq!(response.per_page, 100);
447-
assert_eq!(response.subscribers.len(), 8);
447+
assert_eq!(response.subscribers.len(), 4);
448448
}
449449

450450
#[test]
@@ -466,7 +466,7 @@ mod tests {
466466
.expect("Failed to parse url");
467467

468468
let mut query_pairs = url.query_pairs_mut();
469-
GetSubscriberParams::WpCom(UserId(123)).append_query_pairs(&mut query_pairs);
469+
IndividualSubscriberParams::WpCom(UserId(123)).append_query_pairs(&mut query_pairs);
470470
assert_eq!(
471471
query_pairs.finish().as_str(),
472472
"https://public-api.wordpress.com/wpcom/v2/sites/1234/subscribers/individual?user_id=123&type=wpcom"
@@ -481,7 +481,7 @@ mod tests {
481481
.expect("Failed to parse url");
482482

483483
let mut query_pairs = url.query_pairs_mut();
484-
GetSubscriberParams::Email(SubscriptionId(123)).append_query_pairs(&mut query_pairs);
484+
IndividualSubscriberParams::Email(SubscriptionId(123)).append_query_pairs(&mut query_pairs);
485485
assert_eq!(
486486
query_pairs.finish().as_str(),
487487
"https://public-api.wordpress.com/wpcom/v2/sites/1234/subscribers/individual?subscription_id=123&type=email"
Lines changed: 93 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -1,94 +1,94 @@
11
{
2-
"total": 8,
3-
"pages": 1,
4-
"page": 1,
5-
"per_page": 100,
6-
"subscribers": [
7-
{
8-
"user_id": 0,
9-
"subscription_id": 123456789,
10-
"email_address": "[email protected]",
11-
"date_subscribed": "2023-06-26T10:54:11+00:00",
12-
"is_email_subscriber": true,
13-
"subscription_status": "Subscribed",
14-
"display_name": "user1@example.com",
15-
"avatar": "https://secure.gravatar.com/avatar/00000000000000000000000000000000?s=128&d=mp&r=g"
16-
},
17-
{
18-
"user_id": 0,
19-
"subscription_id": 987654321,
20-
"email_address": "[email protected]",
21-
"date_subscribed": "2022-02-02T22:06:37+00:00",
22-
"is_email_subscriber": true,
23-
"subscription_status": "Subscribed",
24-
"display_name": "[email protected]",
25-
"avatar": "https://secure.gravatar.com/avatar/00000000000000000000000000000000?s=128&d=mp&r=g"
26-
},
27-
{
28-
"user_id": 123456789,
29-
"subscription_id": 456789123,
30-
"email_address": "[email protected]",
31-
"date_subscribed": "2022-02-02T22:06:36+00:00",
32-
"is_email_subscriber": false,
33-
"subscription_status": "Not subscribed",
34-
"avatar": "https://secure.gravatar.com/avatar/00000000000000000000000000000000?s=128&d=mp&r=g",
35-
"display_name": "user3",
36-
"url": "http://user3.wordpress.com"
37-
},
38-
{
39-
"user_id": 987654321,
40-
"subscription_id": 789123456,
41-
"email_address": "user4@example.com",
42-
"date_subscribed": "2020-12-30T10:36:06+00:00",
43-
"is_email_subscriber": true,
44-
"subscription_status": "Subscribed",
45-
"avatar": "https://secure.gravatar.com/avatar/00000000000000000000000000000000?s=128&d=mp&r=g",
46-
"display_name": "user4",
47-
"url": "http://user4.wordpress.com"
48-
},
49-
{
50-
"user_id": 456789123,
51-
"subscription_id": 321654987,
52-
"email_address": "[email protected]",
53-
"date_subscribed": "2020-10-01T14:24:33+00:00",
54-
"is_email_subscriber": true,
55-
"subscription_status": "Not sending",
56-
"avatar": "https://secure.gravatar.com/avatar/00000000000000000000000000000000?s=128&d=mp&r=g",
57-
"display_name": "user5",
58-
"url": "http://user5.wordpress.com"
59-
},
60-
{
61-
"user_id": 789123456,
62-
"subscription_id": 654987321,
63-
"email_address": "[email protected]",
64-
"date_subscribed": "2020-10-01T11:41:51+00:00",
65-
"is_email_subscriber": true,
66-
"subscription_status": "Subscribed",
67-
"avatar": "https://secure.gravatar.com/avatar/00000000000000000000000000000000?s=128&d=mp&r=g",
68-
"display_name": "user6",
69-
"url": "http://user6.wordpress.com"
70-
},
71-
{
72-
"user_id": 321654987,
73-
"subscription_id": 987321654,
74-
"email_address": "[email protected]",
75-
"date_subscribed": "2020-09-24T16:46:23+00:00",
76-
"is_email_subscriber": false,
77-
"subscription_status": "Not subscribed",
78-
"avatar": "https://secure.gravatar.com/avatar/00000000000000000000000000000000?s=128&d=mp&r=g",
79-
"display_name": "user7"
80-
},
81-
{
82-
"user_id": 654987321,
83-
"subscription_id": 321987654,
84-
"email_address": "[email protected]",
85-
"date_subscribed": "2019-05-05T08:16:05+00:00",
86-
"is_email_subscriber": false,
87-
"subscription_status": "Not subscribed",
88-
"avatar": "https://secure.gravatar.com/avatar/00000000000000000000000000000000?s=128&d=mp&r=g",
89-
"display_name": "user8",
90-
"url": "http://user8.wordpress.com"
91-
}
92-
],
93-
"is_owner_subscribed": false
94-
}
2+
"total": 4,
3+
"pages": 1,
4+
"page": 1,
5+
"per_page": 100,
6+
"subscribers": [
7+
{
8+
"user_id": 123456789,
9+
"subscription_id": 900000001,
10+
"email_address": "[email protected]",
11+
"date_subscribed": "2025-02-03T09:09:12+00:00",
12+
"is_email_subscriber": true,
13+
"subscription_status": "Subscribed",
14+
"avatar": "https://2.gravatar.com/avatar/placeholder1?s=128&amp;d=https%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D128&amp;r=G",
15+
"display_name": "Test User One",
16+
"url": "http://testblog1.wordpress.com",
17+
"plans": [
18+
{
19+
"is_gift": true,
20+
"gift_id": 20,
21+
"paid_subscription_id": null,
22+
"status": "active",
23+
"title": "Newsletter Tier",
24+
"currency": "USD",
25+
"renew_interval": "one-time",
26+
"inactive_renew_interval": null,
27+
"renewal_price": 0,
28+
"start_date": "2025-06-27T17:18:28+00:00",
29+
"end_date": "2025-07-27T17:18:28+00:00"
30+
}
31+
]
32+
},
33+
{
34+
"user_id": 0,
35+
"subscription_id": 900000002,
36+
"email_address": "user2@example.com",
37+
"date_subscribed": "2025-01-31T14:11:54+00:00",
38+
"is_email_subscriber": true,
39+
"subscription_status": "Subscribed",
40+
"display_name": "[email protected]",
41+
"avatar": "https://1.gravatar.com/avatar/placeholder2?s=128&amp;d=https%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D128&amp;r=G"
42+
},
43+
{
44+
"user_id": 234567890,
45+
"subscription_id": 800000001,
46+
"email_address": "[email protected]",
47+
"date_subscribed": "2025-01-31T12:53:03+00:00",
48+
"is_email_subscriber": false,
49+
"subscription_status": "Not subscribed",
50+
"avatar": "https://2.gravatar.com/avatar/placeholder3?s=128&amp;d=https%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D128&amp;r=G",
51+
"display_name": "testuser123456"
52+
},
53+
{
54+
"user_id": 345678901,
55+
"subscription_id": 900000003,
56+
"email_address": "user4@example.com",
57+
"date_subscribed": "2025-01-21T12:55:45+00:00",
58+
"is_email_subscriber": true,
59+
"subscription_status": "Subscribed",
60+
"avatar": "https://1.gravatar.com/avatar/placeholder4?s=128&amp;d=https%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D128&amp;r=G",
61+
"display_name": "testpaiduser4",
62+
"url": "http://testblog2.wordpress.com",
63+
"plans": [
64+
{
65+
"is_gift": false,
66+
"gift_id": null,
67+
"paid_subscription_id": "50000001",
68+
"status": "active",
69+
"title": "Newsletter Tier",
70+
"currency": "USD",
71+
"renew_interval": "1 year",
72+
"inactive_renew_interval": null,
73+
"renewal_price": 1,
74+
"start_date": "2025-01-21T12:55:38+00:00",
75+
"end_date": "2026-01-21T12:55:38+00:00"
76+
},
77+
{
78+
"is_gift": true,
79+
"gift_id": 21,
80+
"paid_subscription_id": null,
81+
"status": "active",
82+
"title": "Newsletter Tier",
83+
"currency": "USD",
84+
"renew_interval": "one-time",
85+
"inactive_renew_interval": null,
86+
"renewal_price": 0,
87+
"start_date": "2025-06-27T17:18:28+00:00",
88+
"end_date": "2025-07-27T17:18:28+00:00"
89+
}
90+
]
91+
}
92+
],
93+
"is_owner_subscribed": false
94+
}

wp_api_integration_tests/tests/test_wp_com_subscribers_immut.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use wp_api::wp_com::{
22
WpComSiteId,
33
subscribers::{
4-
GetSubscriberParams, IndividualSubscriberStatsParams, ListSubscribersSortField,
4+
IndividualSubscriberParams, IndividualSubscriberStatsParams, ListSubscribersSortField,
55
SubscribersListParams, SubscriptionId,
66
},
77
};
@@ -31,10 +31,10 @@ async fn list_subscribers(#[case] params: SubscribersListParams) {
3131
#[apply(retrieve_cases)]
3232
#[parallel]
3333
#[ignore]
34-
async fn retrieve_subscriber(#[case] query: GetSubscriberParams) {
34+
async fn retrieve_subscriber(#[case] query: IndividualSubscriberParams) {
3535
wp_com_client()
3636
.subscribers()
37-
.get_subscriber(
37+
.individual_subscriber(
3838
&WpComSiteId(WpComTestCredentials::instance().site_id),
3939
&query,
4040
)
@@ -72,8 +72,8 @@ pub fn list_cases(#[case] params: SubscribersListParams) {}
7272

7373
#[template]
7474
#[rstest]
75-
#[case::wp_com_subscriber(GetSubscriberParams::WpCom(UserId(WpComTestCredentials::instance().wp_com_subscriber_user_id)))]
76-
#[case::email_subscriber(GetSubscriberParams::Email(SubscriptionId(
75+
#[case::wp_com_subscriber(IndividualSubscriberParams::WpCom(UserId(WpComTestCredentials::instance().wp_com_subscriber_user_id)))]
76+
#[case::email_subscriber(IndividualSubscriberParams::Email(SubscriptionId(
7777
WpComTestCredentials::instance().email_subscriber_subscription_id
7878
)))]
79-
pub fn retrieve_cases(#[case] query: GetSubscriberParams) {}
79+
pub fn retrieve_cases(#[case] query: IndividualSubscriberParams) {}

0 commit comments

Comments
 (0)