summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/segmentio/analytics-go/analytics_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/segmentio/analytics-go/analytics_test.go')
-rw-r--r--vendor/github.com/segmentio/analytics-go/analytics_test.go478
1 files changed, 478 insertions, 0 deletions
diff --git a/vendor/github.com/segmentio/analytics-go/analytics_test.go b/vendor/github.com/segmentio/analytics-go/analytics_test.go
new file mode 100644
index 000000000..c6f0dc4f2
--- /dev/null
+++ b/vendor/github.com/segmentio/analytics-go/analytics_test.go
@@ -0,0 +1,478 @@
+package analytics
+
+import "net/http/httptest"
+import "encoding/json"
+import "net/http"
+import "testing"
+import "bytes"
+import "time"
+import "fmt"
+import "io"
+
+func mockId() string { return "I'm unique" }
+
+func mockTime() time.Time {
+ // time.Unix(0, 0) fails on Circle
+ return time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC)
+}
+
+func mockServer() (chan []byte, *httptest.Server) {
+ done := make(chan []byte, 1)
+
+ server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ buf := bytes.NewBuffer(nil)
+ io.Copy(buf, r.Body)
+
+ var v interface{}
+ err := json.Unmarshal(buf.Bytes(), &v)
+ if err != nil {
+ panic(err)
+ }
+
+ b, err := json.MarshalIndent(v, "", " ")
+ if err != nil {
+ panic(err)
+ }
+
+ done <- b
+ }))
+
+ return done, server
+}
+
+func ExampleTrack() {
+ body, server := mockServer()
+ defer server.Close()
+
+ client := New("h97jamjwbh")
+ client.Endpoint = server.URL
+ client.now = mockTime
+ client.uid = mockId
+ client.Size = 1
+
+ client.Track(&Track{
+ Event: "Download",
+ UserId: "123456",
+ Properties: map[string]interface{}{
+ "application": "Segment Desktop",
+ "version": "1.1.0",
+ "platform": "osx",
+ },
+ })
+
+ fmt.Printf("%s\n", <-body)
+ // Output:
+ // {
+ // "batch": [
+ // {
+ // "event": "Download",
+ // "messageId": "I'm unique",
+ // "properties": {
+ // "application": "Segment Desktop",
+ // "platform": "osx",
+ // "version": "1.1.0"
+ // },
+ // "timestamp": "2009-11-10T23:00:00+0000",
+ // "type": "track",
+ // "userId": "123456"
+ // }
+ // ],
+ // "context": {
+ // "library": {
+ // "name": "analytics-go",
+ // "version": "2.1.0"
+ // }
+ // },
+ // "messageId": "I'm unique",
+ // "sentAt": "2009-11-10T23:00:00+0000"
+ // }
+}
+
+func ExampleClose() {
+ body, server := mockServer()
+ defer server.Close()
+
+ client := New("h97jamjwbh")
+ client.Endpoint = server.URL
+ client.now = mockTime
+ client.uid = mockId
+
+ client.Track(&Track{
+ Event: "Download",
+ UserId: "123456",
+ Properties: map[string]interface{}{
+ "application": "Segment Desktop",
+ "version": "1.1.0",
+ "platform": "osx",
+ },
+ })
+
+ client.Close()
+
+ fmt.Printf("%s\n", <-body)
+ // Output:
+ // {
+ // "batch": [
+ // {
+ // "event": "Download",
+ // "messageId": "I'm unique",
+ // "properties": {
+ // "application": "Segment Desktop",
+ // "platform": "osx",
+ // "version": "1.1.0"
+ // },
+ // "timestamp": "2009-11-10T23:00:00+0000",
+ // "type": "track",
+ // "userId": "123456"
+ // }
+ // ],
+ // "context": {
+ // "library": {
+ // "name": "analytics-go",
+ // "version": "2.1.0"
+ // }
+ // },
+ // "messageId": "I'm unique",
+ // "sentAt": "2009-11-10T23:00:00+0000"
+ // }
+}
+
+func ExampleInterval() {
+ body, server := mockServer()
+ defer server.Close()
+
+ client := New("h97jamjwbh")
+ client.Endpoint = server.URL
+ client.now = mockTime
+ client.uid = mockId
+
+ client.Track(&Track{
+ Event: "Download",
+ UserId: "123456",
+ Properties: map[string]interface{}{
+ "application": "Segment Desktop",
+ "version": "1.1.0",
+ "platform": "osx",
+ },
+ })
+
+ // Will flush in 5 seconds (default interval).
+ fmt.Printf("%s\n", <-body)
+ // Output:
+ // {
+ // "batch": [
+ // {
+ // "event": "Download",
+ // "messageId": "I'm unique",
+ // "properties": {
+ // "application": "Segment Desktop",
+ // "platform": "osx",
+ // "version": "1.1.0"
+ // },
+ // "timestamp": "2009-11-10T23:00:00+0000",
+ // "type": "track",
+ // "userId": "123456"
+ // }
+ // ],
+ // "context": {
+ // "library": {
+ // "name": "analytics-go",
+ // "version": "2.1.0"
+ // }
+ // },
+ // "messageId": "I'm unique",
+ // "sentAt": "2009-11-10T23:00:00+0000"
+ // }
+}
+
+func ExampleTrackWithTimestampSet() {
+ body, server := mockServer()
+ defer server.Close()
+
+ client := New("h97jamjwbh")
+ client.Endpoint = server.URL
+ client.now = mockTime
+ client.uid = mockId
+ client.Size = 1
+
+ client.Track(&Track{
+ Event: "Download",
+ UserId: "123456",
+ Properties: map[string]interface{}{
+ "application": "Segment Desktop",
+ "version": "1.1.0",
+ "platform": "osx",
+ },
+ Message: Message{
+ Timestamp: timestamp(time.Date(2015, time.July, 10, 23, 0, 0, 0, time.UTC)),
+ },
+ })
+
+ fmt.Printf("%s\n", <-body)
+ // Output:
+ // {
+ // "batch": [
+ // {
+ // "event": "Download",
+ // "messageId": "I'm unique",
+ // "properties": {
+ // "application": "Segment Desktop",
+ // "platform": "osx",
+ // "version": "1.1.0"
+ // },
+ // "timestamp": "2015-07-10T23:00:00+0000",
+ // "type": "track",
+ // "userId": "123456"
+ // }
+ // ],
+ // "context": {
+ // "library": {
+ // "name": "analytics-go",
+ // "version": "2.1.0"
+ // }
+ // },
+ // "messageId": "I'm unique",
+ // "sentAt": "2009-11-10T23:00:00+0000"
+ // }
+}
+
+func ExampleTrackWithMessageIdSet() {
+ body, server := mockServer()
+ defer server.Close()
+
+ client := New("h97jamjwbh")
+ client.Endpoint = server.URL
+ client.now = mockTime
+ client.uid = mockId
+ client.Size = 1
+
+ client.Track(&Track{
+ Event: "Download",
+ UserId: "123456",
+ Properties: map[string]interface{}{
+ "application": "Segment Desktop",
+ "version": "1.1.0",
+ "platform": "osx",
+ },
+ Message: Message{
+ MessageId: "abc",
+ },
+ })
+
+ fmt.Printf("%s\n", <-body)
+ // Output:
+ // {
+ // "batch": [
+ // {
+ // "event": "Download",
+ // "messageId": "abc",
+ // "properties": {
+ // "application": "Segment Desktop",
+ // "platform": "osx",
+ // "version": "1.1.0"
+ // },
+ // "timestamp": "2009-11-10T23:00:00+0000",
+ // "type": "track",
+ // "userId": "123456"
+ // }
+ // ],
+ // "context": {
+ // "library": {
+ // "name": "analytics-go",
+ // "version": "2.1.0"
+ // }
+ // },
+ // "messageId": "I'm unique",
+ // "sentAt": "2009-11-10T23:00:00+0000"
+ // }
+}
+
+func ExampleTrack_context() {
+ body, server := mockServer()
+ defer server.Close()
+
+ client := New("h97jamjwbh")
+ client.Endpoint = server.URL
+ client.now = mockTime
+ client.uid = mockId
+ client.Size = 1
+
+ client.Track(&Track{
+ Event: "Download",
+ UserId: "123456",
+ Properties: map[string]interface{}{
+ "application": "Segment Desktop",
+ "version": "1.1.0",
+ "platform": "osx",
+ },
+ Context: map[string]interface{}{
+ "whatever": "here",
+ },
+ })
+
+ fmt.Printf("%s\n", <-body)
+ // Output:
+ // {
+ // "batch": [
+ // {
+ // "context": {
+ // "whatever": "here"
+ // },
+ // "event": "Download",
+ // "messageId": "I'm unique",
+ // "properties": {
+ // "application": "Segment Desktop",
+ // "platform": "osx",
+ // "version": "1.1.0"
+ // },
+ // "timestamp": "2009-11-10T23:00:00+0000",
+ // "type": "track",
+ // "userId": "123456"
+ // }
+ // ],
+ // "context": {
+ // "library": {
+ // "name": "analytics-go",
+ // "version": "2.1.0"
+ // }
+ // },
+ // "messageId": "I'm unique",
+ // "sentAt": "2009-11-10T23:00:00+0000"
+ // }
+}
+
+func ExampleTrack_many() {
+ body, server := mockServer()
+ defer server.Close()
+
+ client := New("h97jamjwbh")
+ client.Endpoint = server.URL
+ client.now = mockTime
+ client.uid = mockId
+ client.Size = 3
+
+ for i := 0; i < 5; i++ {
+ client.Track(&Track{
+ Event: "Download",
+ UserId: "123456",
+ Properties: map[string]interface{}{
+ "application": "Segment Desktop",
+ "version": i,
+ },
+ })
+ }
+
+ fmt.Printf("%s\n", <-body)
+ // Output:
+ // {
+ // "batch": [
+ // {
+ // "event": "Download",
+ // "messageId": "I'm unique",
+ // "properties": {
+ // "application": "Segment Desktop",
+ // "version": 0
+ // },
+ // "timestamp": "2009-11-10T23:00:00+0000",
+ // "type": "track",
+ // "userId": "123456"
+ // },
+ // {
+ // "event": "Download",
+ // "messageId": "I'm unique",
+ // "properties": {
+ // "application": "Segment Desktop",
+ // "version": 1
+ // },
+ // "timestamp": "2009-11-10T23:00:00+0000",
+ // "type": "track",
+ // "userId": "123456"
+ // },
+ // {
+ // "event": "Download",
+ // "messageId": "I'm unique",
+ // "properties": {
+ // "application": "Segment Desktop",
+ // "version": 2
+ // },
+ // "timestamp": "2009-11-10T23:00:00+0000",
+ // "type": "track",
+ // "userId": "123456"
+ // }
+ // ],
+ // "context": {
+ // "library": {
+ // "name": "analytics-go",
+ // "version": "2.1.0"
+ // }
+ // },
+ // "messageId": "I'm unique",
+ // "sentAt": "2009-11-10T23:00:00+0000"
+ // }
+}
+
+func ExampleTrackWithIntegrations() {
+ body, server := mockServer()
+ defer server.Close()
+
+ client := New("h97jamjwbh")
+ client.Endpoint = server.URL
+ client.now = mockTime
+ client.uid = mockId
+ client.Size = 1
+
+ client.Track(&Track{
+ Event: "Download",
+ UserId: "123456",
+ Properties: map[string]interface{}{
+ "application": "Segment Desktop",
+ "version": "1.1.0",
+ "platform": "osx",
+ },
+ Integrations: map[string]interface{}{
+ "All": true,
+ "Intercom": false,
+ "Mixpanel": true,
+ },
+ })
+
+ fmt.Printf("%s\n", <-body)
+ // Output:
+ // {
+ // "batch": [
+ // {
+ // "event": "Download",
+ // "integrations": {
+ // "All": true,
+ // "Intercom": false,
+ // "Mixpanel": true
+ // },
+ // "messageId": "I'm unique",
+ // "properties": {
+ // "application": "Segment Desktop",
+ // "platform": "osx",
+ // "version": "1.1.0"
+ // },
+ // "timestamp": "2009-11-10T23:00:00+0000",
+ // "type": "track",
+ // "userId": "123456"
+ // }
+ // ],
+ // "context": {
+ // "library": {
+ // "name": "analytics-go",
+ // "version": "2.1.0"
+ // }
+ // },
+ // "messageId": "I'm unique",
+ // "sentAt": "2009-11-10T23:00:00+0000"
+ // }
+}
+
+// Tests that calling Close right after creating the client object doesn't
+// block.
+// Bug: https://github.com/segmentio/analytics-go/issues/43
+func TestCloseFinish(_ *testing.T) {
+ c := New("test")
+ c.Close()
+}