telegraf/plugins/inputs/mailchimp/mailchimp_test.go

775 lines
22 KiB
Go

package mailchimp
import (
"fmt"
"net/http"
"net/http/httptest"
"net/url"
"testing"
"github.com/influxdata/telegraf/testutil"
"github.com/stretchr/testify/require"
)
func TestMailChimpGatherReports(t *testing.T) {
ts := httptest.NewServer(
http.HandlerFunc(
func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
fmt.Fprintln(w, sampleReports)
},
))
defer ts.Close()
u, err := url.ParseRequestURI(ts.URL)
require.NoError(t, err)
api := &ChimpAPI{
url: u,
Debug: true,
}
m := MailChimp{
api: api,
}
var acc testutil.Accumulator
err = m.Gather(&acc)
require.NoError(t, err)
tags := make(map[string]string)
tags["id"] = "42694e9e57"
tags["campaign_title"] = "Freddie's Jokes Vol. 1"
fields := map[string]interface{}{
"emails_sent": int(200),
"abuse_reports": int(0),
"unsubscribed": int(2),
"hard_bounces": int(0),
"soft_bounces": int(2),
"syntax_errors": int(0),
"forwards_count": int(0),
"forwards_opens": int(0),
"opens_total": int(186),
"unique_opens": int(100),
"clicks_total": int(42),
"unique_clicks": int(400),
"unique_subscriber_clicks": int(42),
"facebook_recipient_likes": int(5),
"facebook_unique_likes": int(8),
"facebook_likes": int(42),
"open_rate": float64(42),
"click_rate": float64(42),
"industry_open_rate": float64(0.17076777144396),
"industry_click_rate": float64(0.027431311866951),
"industry_bounce_rate": float64(0.0063767751251474),
"industry_unopen_rate": float64(0.82285545343089),
"industry_unsub_rate": float64(0.001436957032815),
"industry_abuse_rate": float64(0.00021111996110887),
"list_stats_sub_rate": float64(10),
"list_stats_unsub_rate": float64(20),
"list_stats_open_rate": float64(42),
"list_stats_click_rate": float64(42),
"industry_type": "Social Networks and Online Communities",
}
acc.AssertContainsTaggedFields(t, "mailchimp", fields, tags)
}
func TestMailChimpGatherReport(t *testing.T) {
ts := httptest.NewServer(
http.HandlerFunc(
func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
fmt.Fprintln(w, sampleReport)
},
))
defer ts.Close()
u, err := url.ParseRequestURI(ts.URL)
require.NoError(t, err)
api := &ChimpAPI{
url: u,
Debug: true,
}
m := MailChimp{
api: api,
CampaignId: "test",
}
var acc testutil.Accumulator
err = m.Gather(&acc)
require.NoError(t, err)
tags := make(map[string]string)
tags["id"] = "42694e9e57"
tags["campaign_title"] = "Freddie's Jokes Vol. 1"
fields := map[string]interface{}{
"emails_sent": int(200),
"abuse_reports": int(0),
"unsubscribed": int(2),
"hard_bounces": int(0),
"soft_bounces": int(2),
"syntax_errors": int(0),
"forwards_count": int(0),
"forwards_opens": int(0),
"opens_total": int(186),
"unique_opens": int(100),
"clicks_total": int(42),
"unique_clicks": int(400),
"unique_subscriber_clicks": int(42),
"facebook_recipient_likes": int(5),
"facebook_unique_likes": int(8),
"facebook_likes": int(42),
"open_rate": float64(42),
"click_rate": float64(42),
"industry_open_rate": float64(0.17076777144396),
"industry_click_rate": float64(0.027431311866951),
"industry_bounce_rate": float64(0.0063767751251474),
"industry_unopen_rate": float64(0.82285545343089),
"industry_unsub_rate": float64(0.001436957032815),
"industry_abuse_rate": float64(0.00021111996110887),
"list_stats_sub_rate": float64(10),
"list_stats_unsub_rate": float64(20),
"list_stats_open_rate": float64(42),
"list_stats_click_rate": float64(42),
"industry_type": "Social Networks and Online Communities",
}
acc.AssertContainsTaggedFields(t, "mailchimp", fields, tags)
}
func TestMailChimpGatherError(t *testing.T) {
ts := httptest.NewServer(
http.HandlerFunc(
func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
fmt.Fprintln(w, sampleError)
},
))
defer ts.Close()
u, err := url.ParseRequestURI(ts.URL)
require.NoError(t, err)
api := &ChimpAPI{
url: u,
Debug: true,
}
m := MailChimp{
api: api,
CampaignId: "test",
}
var acc testutil.Accumulator
err = m.Gather(&acc)
require.Error(t, err)
}
var sampleReports = `
{
"reports": [
{
"id": "42694e9e57",
"campaign_title": "Freddie's Jokes Vol. 1",
"type": "regular",
"emails_sent": 200,
"abuse_reports": 0,
"unsubscribed": 2,
"send_time": "2015-09-15T19:05:51+00:00",
"bounces": {
"hard_bounces": 0,
"soft_bounces": 2,
"syntax_errors": 0
},
"forwards": {
"forwards_count": 0,
"forwards_opens": 0
},
"opens": {
"opens_total": 186,
"unique_opens": 100,
"open_rate": 42,
"last_open": "2015-09-15T19:15:47+00:00"
},
"clicks": {
"clicks_total": 42,
"unique_clicks": 400,
"unique_subscriber_clicks": 42,
"click_rate": 42,
"last_click": "2015-09-15T19:15:47+00:00"
},
"facebook_likes": {
"recipient_likes": 5,
"unique_likes": 8,
"facebook_likes": 42
},
"industry_stats": {
"type": "Social Networks and Online Communities",
"open_rate": 0.17076777144396,
"click_rate": 0.027431311866951,
"bounce_rate": 0.0063767751251474,
"unopen_rate": 0.82285545343089,
"unsub_rate": 0.001436957032815,
"abuse_rate": 0.00021111996110887
},
"list_stats": {
"sub_rate": 10,
"unsub_rate": 20,
"open_rate": 42,
"click_rate": 42
},
"timeseries": [
{
"timestamp": "2015-09-15T19:00:00+00:00",
"emails_sent": 198,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-15T20:00:00+00:00",
"emails_sent": 2,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-15T21:00:00+00:00",
"emails_sent": 0,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-15T22:00:00+00:00",
"emails_sent": 0,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-15T23:00:00+00:00",
"emails_sent": 0,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-16T00:00:00+00:00",
"emails_sent": 0,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-16T01:00:00+00:00",
"emails_sent": 0,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-16T02:00:00+00:00",
"emails_sent": 0,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-16T03:00:00+00:00",
"emails_sent": 0,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-16T04:00:00+00:00",
"emails_sent": 0,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-16T05:00:00+00:00",
"emails_sent": 0,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-16T06:00:00+00:00",
"emails_sent": 0,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-16T07:00:00+00:00",
"emails_sent": 0,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-16T08:00:00+00:00",
"emails_sent": 0,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-16T09:00:00+00:00",
"emails_sent": 0,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-16T10:00:00+00:00",
"emails_sent": 0,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-16T11:00:00+00:00",
"emails_sent": 0,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-16T12:00:00+00:00",
"emails_sent": 0,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-16T13:00:00+00:00",
"emails_sent": 0,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-16T14:00:00+00:00",
"emails_sent": 0,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-16T15:00:00+00:00",
"emails_sent": 0,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-16T16:00:00+00:00",
"emails_sent": 0,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-16T17:00:00+00:00",
"emails_sent": 0,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-16T18:00:00+00:00",
"emails_sent": 0,
"unique_opens": 0,
"recipients_clicks": 0
}
],
"share_report": {
"share_url": "http://usX.vip-reports.net/reports/summary?u=xxxx&id=xxxx",
"share_password": "freddielikesjokes"
},
"delivery_status": {
"enabled": false
},
"_links": [
{
"rel": "parent",
"href": "https://usX.api.mailchimp.com/3.0/reports",
"method": "GET",
"targetSchema": "https://api.mailchimp.com/schema/3.0/Reports/Collection.json",
"schema": "https://api.mailchimp.com/schema/3.0/CollectionLinks/Reports.json"
},
{
"rel": "self",
"href": "https://usX.api.mailchimp.com/3.0/reports/42694e9e57",
"method": "GET",
"targetSchema": "https://api.mailchimp.com/schema/3.0/Reports/Instance.json"
},
{
"rel": "campaign",
"href": "https://usX.api.mailchimp.com/3.0/campaigns/42694e9e57",
"method": "GET",
"targetSchema": "https://api.mailchimp.com/schema/3.0/Campaigns/Instance.json"
},
{
"rel": "sub-reports",
"href": "https://usX.api.mailchimp.com/3.0/reports/42694e9e57/sub-reports",
"method": "GET",
"targetSchema": "https://api.mailchimp.com/schema/3.0/Reports/Sub/Collection.json"
},
{
"rel": "abuse-reports",
"href": "https://usX.api.mailchimp.com/3.0/reports/42694e9e57/abuse-reports",
"method": "GET",
"targetSchema": "https://api.mailchimp.com/schema/3.0/Reports/Abuse/Collection.json"
},
{
"rel": "advice",
"href": "https://usX.api.mailchimp.com/3.0/reports/42694e9e57/advice",
"method": "GET",
"targetSchema": "https://api.mailchimp.com/schema/3.0/Reports/Advice/Collection.json"
},
{
"rel": "click-details",
"href": "https://usX.api.mailchimp.com/3.0/reports/42694e9e57/click-details",
"method": "GET",
"targetSchema": "https://api.mailchimp.com/schema/3.0/Reports/ClickDetails/Collection.json"
},
{
"rel": "domain-performance",
"href": "https://usX.api.mailchimp.com/3.0/reports/42694e9e57/domain-performance",
"method": "GET",
"targetSchema": "https://api.mailchimp.com/schema/3.0/Reports/DomainPerformance/Collection.json"
},
{
"rel": "eepurl",
"href": "https://usX.api.mailchimp.com/3.0/reports/42694e9e57/eepurl",
"method": "GET",
"targetSchema": "https://api.mailchimp.com/schema/3.0/Reports/Eepurl/Collection.json"
},
{
"rel": "email-activity",
"href": "https://usX.api.mailchimp.com/3.0/reports/42694e9e57/email-activity",
"method": "GET",
"targetSchema": "https://api.mailchimp.com/schema/3.0/Reports/EmailActivity/Collection.json"
},
{
"rel": "locations",
"href": "https://usX.api.mailchimp.com/3.0/reports/42694e9e57/locations",
"method": "GET",
"targetSchema": "https://api.mailchimp.com/schema/3.0/Reports/Locations/Collection.json"
},
{
"rel": "sent-to",
"href": "https://usX.api.mailchimp.com/3.0/reports/42694e9e57/sent-to",
"method": "GET",
"targetSchema": "https://api.mailchimp.com/schema/3.0/Reports/SentTo/Collection.json"
},
{
"rel": "unsubscribed",
"href": "https://usX.api.mailchimp.com/3.0/reports/42694e9e57/unsubscribed",
"method": "GET",
"targetSchema": "https://api.mailchimp.com/schema/3.0/Reports/Unsubs/Collection.json"
}
]
}
],
"_links": [
{
"rel": "parent",
"href": "https://usX.api.mailchimp.com/3.0/",
"method": "GET",
"targetSchema": "https://api.mailchimp.com/schema/3.0/Root.json"
},
{
"rel": "self",
"href": "https://usX.api.mailchimp.com/3.0/reports",
"method": "GET",
"targetSchema": "https://api.mailchimp.com/schema/3.0/Reports/Collection.json",
"schema": "https://api.mailchimp.com/schema/3.0/CollectionLinks/Reports.json"
}
],
"total_items": 1
}
`
var sampleReport = `
{
"id": "42694e9e57",
"campaign_title": "Freddie's Jokes Vol. 1",
"type": "regular",
"emails_sent": 200,
"abuse_reports": 0,
"unsubscribed": 2,
"send_time": "2015-09-15T19:05:51+00:00",
"bounces": {
"hard_bounces": 0,
"soft_bounces": 2,
"syntax_errors": 0
},
"forwards": {
"forwards_count": 0,
"forwards_opens": 0
},
"opens": {
"opens_total": 186,
"unique_opens": 100,
"open_rate": 42,
"last_open": "2015-09-15T19:15:47+00:00"
},
"clicks": {
"clicks_total": 42,
"unique_clicks": 400,
"unique_subscriber_clicks": 42,
"click_rate": 42,
"last_click": "2015-09-15T19:15:47+00:00"
},
"facebook_likes": {
"recipient_likes": 5,
"unique_likes": 8,
"facebook_likes": 42
},
"industry_stats": {
"type": "Social Networks and Online Communities",
"open_rate": 0.17076777144396,
"click_rate": 0.027431311866951,
"bounce_rate": 0.0063767751251474,
"unopen_rate": 0.82285545343089,
"unsub_rate": 0.001436957032815,
"abuse_rate": 0.00021111996110887
},
"list_stats": {
"sub_rate": 10,
"unsub_rate": 20,
"open_rate": 42,
"click_rate": 42
},
"timeseries": [
{
"timestamp": "2015-09-15T19:00:00+00:00",
"emails_sent": 198,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-15T20:00:00+00:00",
"emails_sent": 2,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-15T21:00:00+00:00",
"emails_sent": 0,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-15T22:00:00+00:00",
"emails_sent": 0,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-15T23:00:00+00:00",
"emails_sent": 0,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-16T00:00:00+00:00",
"emails_sent": 0,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-16T01:00:00+00:00",
"emails_sent": 0,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-16T02:00:00+00:00",
"emails_sent": 0,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-16T03:00:00+00:00",
"emails_sent": 0,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-16T04:00:00+00:00",
"emails_sent": 0,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-16T05:00:00+00:00",
"emails_sent": 0,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-16T06:00:00+00:00",
"emails_sent": 0,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-16T07:00:00+00:00",
"emails_sent": 0,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-16T08:00:00+00:00",
"emails_sent": 0,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-16T09:00:00+00:00",
"emails_sent": 0,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-16T10:00:00+00:00",
"emails_sent": 0,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-16T11:00:00+00:00",
"emails_sent": 0,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-16T12:00:00+00:00",
"emails_sent": 0,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-16T13:00:00+00:00",
"emails_sent": 0,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-16T14:00:00+00:00",
"emails_sent": 0,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-16T15:00:00+00:00",
"emails_sent": 0,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-16T16:00:00+00:00",
"emails_sent": 0,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-16T17:00:00+00:00",
"emails_sent": 0,
"unique_opens": 0,
"recipients_clicks": 0
},
{
"timestamp": "2015-09-16T18:00:00+00:00",
"emails_sent": 0,
"unique_opens": 0,
"recipients_clicks": 0
}
],
"share_report": {
"share_url": "http://usX.vip-reports.net/reports/summary?u=xxxx&id=xxxx",
"share_password": "freddielikesjokes"
},
"delivery_status": {
"enabled": false
},
"_links": [
{
"rel": "parent",
"href": "https://usX.api.mailchimp.com/3.0/reports",
"method": "GET",
"targetSchema": "https://api.mailchimp.com/schema/3.0/Reports/Collection.json",
"schema": "https://api.mailchimp.com/schema/3.0/CollectionLinks/Reports.json"
},
{
"rel": "self",
"href": "https://usX.api.mailchimp.com/3.0/reports/42694e9e57",
"method": "GET",
"targetSchema": "https://api.mailchimp.com/schema/3.0/Reports/Instance.json"
},
{
"rel": "campaign",
"href": "https://usX.api.mailchimp.com/3.0/campaigns/42694e9e57",
"method": "GET",
"targetSchema": "https://api.mailchimp.com/schema/3.0/Campaigns/Instance.json"
},
{
"rel": "sub-reports",
"href": "https://usX.api.mailchimp.com/3.0/reports/42694e9e57/sub-reports",
"method": "GET",
"targetSchema": "https://api.mailchimp.com/schema/3.0/Reports/Sub/Collection.json"
},
{
"rel": "abuse-reports",
"href": "https://usX.api.mailchimp.com/3.0/reports/42694e9e57/abuse-reports",
"method": "GET",
"targetSchema": "https://api.mailchimp.com/schema/3.0/Reports/Abuse/Collection.json"
},
{
"rel": "advice",
"href": "https://usX.api.mailchimp.com/3.0/reports/42694e9e57/advice",
"method": "GET",
"targetSchema": "https://api.mailchimp.com/schema/3.0/Reports/Advice/Collection.json"
},
{
"rel": "click-details",
"href": "https://usX.api.mailchimp.com/3.0/reports/42694e9e57/click-details",
"method": "GET",
"targetSchema": "https://api.mailchimp.com/schema/3.0/Reports/ClickDetails/Collection.json"
},
{
"rel": "domain-performance",
"href": "https://usX.api.mailchimp.com/3.0/reports/42694e9e57/domain-performance",
"method": "GET",
"targetSchema": "https://api.mailchimp.com/schema/3.0/Reports/DomainPerformance/Collection.json"
},
{
"rel": "eepurl",
"href": "https://usX.api.mailchimp.com/3.0/reports/42694e9e57/eepurl",
"method": "GET",
"targetSchema": "https://api.mailchimp.com/schema/3.0/Reports/Eepurl/Collection.json"
},
{
"rel": "email-activity",
"href": "https://usX.api.mailchimp.com/3.0/reports/42694e9e57/email-activity",
"method": "GET",
"targetSchema": "https://api.mailchimp.com/schema/3.0/Reports/EmailActivity/Collection.json"
},
{
"rel": "locations",
"href": "https://usX.api.mailchimp.com/3.0/reports/42694e9e57/locations",
"method": "GET",
"targetSchema": "https://api.mailchimp.com/schema/3.0/Reports/Locations/Collection.json"
},
{
"rel": "sent-to",
"href": "https://usX.api.mailchimp.com/3.0/reports/42694e9e57/sent-to",
"method": "GET",
"targetSchema": "https://api.mailchimp.com/schema/3.0/Reports/SentTo/Collection.json"
},
{
"rel": "unsubscribed",
"href": "https://usX.api.mailchimp.com/3.0/reports/42694e9e57/unsubscribed",
"method": "GET",
"targetSchema": "https://api.mailchimp.com/schema/3.0/Reports/Unsubs/Collection.json"
}
]
}
`
var sampleError = `
{
"type": "http://developer.mailchimp.com/documentation/mailchimp/guides/error-glossary/",
"title": "API Key Invalid",
"status": 401,
"detail": "Your API key may be invalid, or you've attempted to access the wrong datacenter.",
"instance": ""
}
`