enhance tests for notification server
This commit is contained in:
		@@ -10,55 +10,451 @@ import (
 | 
			
		||||
	"strings"
 | 
			
		||||
	"testing"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	core "github.com/diphantxm/ozon-api-client"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type testData struct {
 | 
			
		||||
	raw    string
 | 
			
		||||
	object interface{}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func pingTest(t *testing.T) testData {
 | 
			
		||||
	return testData{
 | 
			
		||||
		object: &pingRequest{
 | 
			
		||||
			Common: Common{MessageType: PingType},
 | 
			
		||||
			Time:   core.TimeFromString(t, "2006-01-02T15:04:05Z", "2019-08-24T14:15:22Z"),
 | 
			
		||||
		},
 | 
			
		||||
		raw: `{
 | 
			
		||||
			"message_type": "TYPE_PING",
 | 
			
		||||
			"time": "2019-08-24T14:15:22Z"
 | 
			
		||||
		}`,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func newPostingTest(t *testing.T) testData {
 | 
			
		||||
	return testData{
 | 
			
		||||
		object: &NewPosting{
 | 
			
		||||
			Common:        Common{MessageType: NewPostingType},
 | 
			
		||||
			PostingNumber: "24219509-0020-1",
 | 
			
		||||
			Products: []Product{
 | 
			
		||||
				{
 | 
			
		||||
					SKU:      147451959,
 | 
			
		||||
					Quantity: 2,
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
			InProccessAt: core.TimeFromString(t, "2006-01-02T15:04:05Z", "2021-01-26T06:56:36.294Z"),
 | 
			
		||||
			WarehouseId:  18850503335000,
 | 
			
		||||
			SellerId:     15,
 | 
			
		||||
		},
 | 
			
		||||
		raw: `{
 | 
			
		||||
			"message_type": "TYPE_NEW_POSTING",
 | 
			
		||||
			"posting_number": "24219509-0020-1",
 | 
			
		||||
			"products": [
 | 
			
		||||
			  {
 | 
			
		||||
				"sku": 147451959,
 | 
			
		||||
				"quantity": 2
 | 
			
		||||
			  }
 | 
			
		||||
			],
 | 
			
		||||
			"in_process_at": "2021-01-26T06:56:36.294Z",
 | 
			
		||||
			"warehouse_id": 18850503335000,
 | 
			
		||||
			"seller_id": 15
 | 
			
		||||
		}`,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func postingCancelledTest(t *testing.T) testData {
 | 
			
		||||
	return testData{
 | 
			
		||||
		object: &PostingCancelled{
 | 
			
		||||
			Common:        Common{MessageType: PostingCancelledType},
 | 
			
		||||
			PostingNumber: "24219509-0020-1",
 | 
			
		||||
			Products: []Product{
 | 
			
		||||
				{
 | 
			
		||||
					SKU:      147451959,
 | 
			
		||||
					Quantity: 1,
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
			OldState:         "posting_transferred_to_courier_service",
 | 
			
		||||
			NewState:         "posting_canceled",
 | 
			
		||||
			ChangedStateDate: core.TimeFromString(t, "2006-01-02T15:04:05Z", "2021-01-26T06:56:36.294Z"),
 | 
			
		||||
			Reason:           Reason{Id: 1, Message: "message"},
 | 
			
		||||
			WarehouseId:      1,
 | 
			
		||||
			SellerId:         15,
 | 
			
		||||
		},
 | 
			
		||||
		raw: `{
 | 
			
		||||
			"message_type": "TYPE_POSTING_CANCELLED",
 | 
			
		||||
			"posting_number": "24219509-0020-1",
 | 
			
		||||
			"products": [
 | 
			
		||||
			  {
 | 
			
		||||
				"sku": 147451959,
 | 
			
		||||
				"quantity": 1
 | 
			
		||||
			  }
 | 
			
		||||
			],
 | 
			
		||||
			"old_state": "posting_transferred_to_courier_service",
 | 
			
		||||
			"new_state": "posting_canceled",
 | 
			
		||||
			"changed_state_date": "2021-01-26T06:56:36.294Z",
 | 
			
		||||
			"reason": {
 | 
			
		||||
			  "id": 1,
 | 
			
		||||
			  "message": "message"
 | 
			
		||||
			},
 | 
			
		||||
			"warehouse_id": 1,
 | 
			
		||||
			"seller_id": 15
 | 
			
		||||
		}`,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func cutoffDateChangedTest(t *testing.T) testData {
 | 
			
		||||
	return testData{
 | 
			
		||||
		object: &CutoffDateChanged{
 | 
			
		||||
			Common:        Common{MessageType: CutoffDateChangedType},
 | 
			
		||||
			PostingNumber: "24219509-0020-2",
 | 
			
		||||
			NewCutoffDate: core.TimeFromString(t, "2006-01-02T15:04:05Z", "2021-11-24T07:00:00Z"),
 | 
			
		||||
			OldCutoffDate: core.TimeFromString(t, "2006-01-02T15:04:05Z", "2021-11-21T10:00:00Z"),
 | 
			
		||||
			WarehouseId:   1,
 | 
			
		||||
			SellerId:      15,
 | 
			
		||||
		},
 | 
			
		||||
		raw: `{
 | 
			
		||||
			"message_type": "TYPE_CUTOFF_DATE_CHANGED",
 | 
			
		||||
			"posting_number": "24219509-0020-2",
 | 
			
		||||
			"new_cutoff_date": "2021-11-24T07:00:00Z",
 | 
			
		||||
			"old_cutoff_date": "2021-11-21T10:00:00Z",
 | 
			
		||||
			"warehouse_id": 1,
 | 
			
		||||
			"seller_id": 15
 | 
			
		||||
		}`,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func deliveryDateChangedTest(t *testing.T) testData {
 | 
			
		||||
	return testData{
 | 
			
		||||
		object: &DeliveryDateChanged{
 | 
			
		||||
			Common:               Common{MessageType: DeliveryDateChangedType},
 | 
			
		||||
			PostingNumber:        "24219509-0020-2",
 | 
			
		||||
			NewDeliveryDateBegin: core.TimeFromString(t, "2006-01-02T15:04:05Z", "2021-11-24T07:00:00Z"),
 | 
			
		||||
			NewDeliveryDateEnd:   core.TimeFromString(t, "2006-01-02T15:04:05Z", "2021-11-24T16:00:00Z"),
 | 
			
		||||
			OldDeliveryDateBegin: core.TimeFromString(t, "2006-01-02T15:04:05Z", "2021-11-21T10:00:00Z"),
 | 
			
		||||
			OldDeliveryDateEnd:   core.TimeFromString(t, "2006-01-02T15:04:05Z", "2021-11-21T19:00:00Z"),
 | 
			
		||||
			WarehouseId:          1,
 | 
			
		||||
			SellerId:             15,
 | 
			
		||||
		},
 | 
			
		||||
		raw: `{
 | 
			
		||||
			"message_type": "TYPE_DELIVERY_DATE_CHANGED",
 | 
			
		||||
			"posting_number": "24219509-0020-2",
 | 
			
		||||
			"new_delivery_date_begin": "2021-11-24T07:00:00Z",
 | 
			
		||||
			"new_delivery_date_end": "2021-11-24T16:00:00Z",
 | 
			
		||||
			"old_delivery_date_begin": "2021-11-21T10:00:00Z",
 | 
			
		||||
			"old_delivery_date_end": "2021-11-21T19:00:00Z",
 | 
			
		||||
			"warehouse_id": 1,
 | 
			
		||||
			"seller_id": 15
 | 
			
		||||
		}`,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func priceIndexChangedTest(t *testing.T) testData {
 | 
			
		||||
	return testData{
 | 
			
		||||
		object: &PriceIndexChanged{
 | 
			
		||||
			Common:     Common{MessageType: PriceIndexChangedType},
 | 
			
		||||
			UpdatedAt:  core.TimeFromString(t, "2006-01-02T15:04:05Z", "2022-06-21T05:52:46.648533678Z"),
 | 
			
		||||
			SKU:        147451959,
 | 
			
		||||
			ProductId:  1234,
 | 
			
		||||
			PriceIndex: 5678,
 | 
			
		||||
			SellerId:   15,
 | 
			
		||||
		},
 | 
			
		||||
		raw: `{
 | 
			
		||||
			"seller_id": 15,
 | 
			
		||||
			"message_type": "TYPE_PRICE_INDEX_CHANGED",
 | 
			
		||||
			"updated_at":"2022-06-21T05:52:46.648533678Z",
 | 
			
		||||
			"sku": 147451959,
 | 
			
		||||
			"product_id": 1234,
 | 
			
		||||
			"price_index": 5678
 | 
			
		||||
		}`,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func stocksChangedTest(t *testing.T) testData {
 | 
			
		||||
	return testData{
 | 
			
		||||
		object: &StocksChanged{
 | 
			
		||||
			Common: Common{MessageType: StocksChangedType},
 | 
			
		||||
			Items: []Item{
 | 
			
		||||
				{
 | 
			
		||||
					UpdatedAt: core.TimeFromString(t, "2006-01-02T15:04:05Z", "2021-09-01T14:15:22Z"),
 | 
			
		||||
					SKU:       5678,
 | 
			
		||||
					ProductId: 1234,
 | 
			
		||||
					Stocks: []Stock{
 | 
			
		||||
						{
 | 
			
		||||
							WarehouseId: 10,
 | 
			
		||||
							Present:     50,
 | 
			
		||||
							Reserved:    5,
 | 
			
		||||
						},
 | 
			
		||||
					},
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
			SellerId: 15,
 | 
			
		||||
		},
 | 
			
		||||
		raw: `{
 | 
			
		||||
			"message_type": "TYPE_STOCKS_CHANGED",
 | 
			
		||||
			"seller_id": 15,
 | 
			
		||||
			"items": [
 | 
			
		||||
			  {
 | 
			
		||||
				"product_id": 1234,
 | 
			
		||||
				"sku": 5678,
 | 
			
		||||
				"updated_at": "2021-09-01T14:15:22Z",
 | 
			
		||||
				"stocks": [
 | 
			
		||||
				  {
 | 
			
		||||
					"warehouse_id": 10,
 | 
			
		||||
					"present": 50,
 | 
			
		||||
					"reserved": 5
 | 
			
		||||
				  }
 | 
			
		||||
				]
 | 
			
		||||
			  }
 | 
			
		||||
			]
 | 
			
		||||
		}`,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func newMessageTest(t *testing.T) testData {
 | 
			
		||||
	return testData{
 | 
			
		||||
		object: &NewMessage{
 | 
			
		||||
			Common:    Common{MessageType: NewMessageType},
 | 
			
		||||
			ChatId:    "b646d975-0c9c-4872-9f41-8b1e57181063",
 | 
			
		||||
			ChatType:  "Buyer_Seller",
 | 
			
		||||
			MessageId: "3000000000817031942",
 | 
			
		||||
			CreatedAt: core.TimeFromString(t, "2006-01-02T15:04:05Z", "2022-07-18T20:58:04.528Z"),
 | 
			
		||||
			User:      User{Id: "115568", Type: "Customer"},
 | 
			
		||||
			Data:      []string{"Message text"},
 | 
			
		||||
			SellerId:  7,
 | 
			
		||||
		},
 | 
			
		||||
		raw: `{  
 | 
			
		||||
			"message_type": "TYPE_NEW_MESSAGE",
 | 
			
		||||
			"chat_id": "b646d975-0c9c-4872-9f41-8b1e57181063",
 | 
			
		||||
			"chat_type": "Buyer_Seller",
 | 
			
		||||
			"message_id": "3000000000817031942",
 | 
			
		||||
			"created_at": "2022-07-18T20:58:04.528Z",
 | 
			
		||||
			"user": {
 | 
			
		||||
				"id": "115568",
 | 
			
		||||
				"type": "Customer"
 | 
			
		||||
			},
 | 
			
		||||
			"data": [
 | 
			
		||||
				"Message text"
 | 
			
		||||
			],  
 | 
			
		||||
			"seller_id": 7
 | 
			
		||||
		}`,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func updateMessageTest(t *testing.T) testData {
 | 
			
		||||
	return testData{
 | 
			
		||||
		object: &UpdateMessage{
 | 
			
		||||
			NewMessage: NewMessage{
 | 
			
		||||
				Common:    Common{MessageType: UpdateMessageType},
 | 
			
		||||
				ChatId:    "b646d975-0c9c-4872-9f41-8b1e57181063",
 | 
			
		||||
				ChatType:  "Buyer_Seller",
 | 
			
		||||
				MessageId: "3000000000817031942",
 | 
			
		||||
				CreatedAt: core.TimeFromString(t, "2006-01-02T15:04:05Z", "2022-07-18T20:58:04.528Z"),
 | 
			
		||||
				User: User{
 | 
			
		||||
					Id:   "115568",
 | 
			
		||||
					Type: "Сustomer",
 | 
			
		||||
				},
 | 
			
		||||
				Data:     []string{"Message text"},
 | 
			
		||||
				SellerId: 7,
 | 
			
		||||
			},
 | 
			
		||||
			UpdatedAt: core.TimeFromString(t, "2006-01-02T15:04:05Z", "2022-07-18T20:59:04.528Z"),
 | 
			
		||||
		},
 | 
			
		||||
		raw: `{  
 | 
			
		||||
			"message_type": "TYPE_UPDATE_MESSAGE",
 | 
			
		||||
			"chat_id": "b646d975-0c9c-4872-9f41-8b1e57181063",
 | 
			
		||||
			"chat_type": "Buyer_Seller",
 | 
			
		||||
			"message_id": "3000000000817031942",
 | 
			
		||||
			"created_at": "2022-07-18T20:58:04.528Z",
 | 
			
		||||
			"updated_at": "2022-07-18T20:59:04.528Z",
 | 
			
		||||
			"user": {
 | 
			
		||||
				"id": "115568",
 | 
			
		||||
				"type": "Сustomer"
 | 
			
		||||
			},
 | 
			
		||||
			"data": [
 | 
			
		||||
				"Message text"
 | 
			
		||||
			], 
 | 
			
		||||
			"seller_id": 7
 | 
			
		||||
		}`,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func createUpdateItemTest(t *testing.T) testData {
 | 
			
		||||
	return testData{
 | 
			
		||||
		object: &CreateOrUpdateItem{
 | 
			
		||||
			Common:    Common{MessageType: "TYPE_CREATE_OR_UPDATE_ITEM"},
 | 
			
		||||
			OfferId:   "1234",
 | 
			
		||||
			ProductId: 5678,
 | 
			
		||||
			IsError:   false,
 | 
			
		||||
			ChangedAt: core.TimeFromString(t, "2006-01-02T15:04:05Z", "2022-09-01T14:15:22Z"),
 | 
			
		||||
			SellerId:  15,
 | 
			
		||||
		},
 | 
			
		||||
		raw: `{
 | 
			
		||||
			"message_type": "TYPE_CREATE_OR_UPDATE_ITEM",
 | 
			
		||||
			"seller_id": 15,
 | 
			
		||||
			"offer_id": "1234",
 | 
			
		||||
			"product_id": 5678,
 | 
			
		||||
			"is_error": false,
 | 
			
		||||
			"changed_at": "2022-09-01T14:15:22Z"
 | 
			
		||||
		}`,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func stateChangedTest(t *testing.T) testData {
 | 
			
		||||
	return testData{
 | 
			
		||||
		object: &StateChanged{
 | 
			
		||||
			Common:           Common{MessageType: "TYPE_STATE_CHANGED"},
 | 
			
		||||
			PostingNumber:    "24219509-0020-2",
 | 
			
		||||
			NewState:         "posting_delivered",
 | 
			
		||||
			ChangedStateDate: core.TimeFromString(t, "2006-01-02T15:04:05Z", "2021-02-02T15:07:46.765Z"),
 | 
			
		||||
			WarehouseId:      1,
 | 
			
		||||
			SellerId:         15,
 | 
			
		||||
		},
 | 
			
		||||
		raw: `{
 | 
			
		||||
			"message_type": "TYPE_STATE_CHANGED",
 | 
			
		||||
			"posting_number": "24219509-0020-2",
 | 
			
		||||
			"new_state": "posting_delivered",
 | 
			
		||||
			"changed_state_date": "2021-02-02T15:07:46.765Z",
 | 
			
		||||
			"warehouse_id": 1,
 | 
			
		||||
			"seller_id": 15
 | 
			
		||||
		}`,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func messageReadTest(t *testing.T) testData {
 | 
			
		||||
	return testData{
 | 
			
		||||
		object: &MessageRead{
 | 
			
		||||
			LastReadMessageId: "3000000000817031942",
 | 
			
		||||
			NewMessage: NewMessage{
 | 
			
		||||
				Common:    Common{MessageType: "TYPE_MESSAGE_READ"},
 | 
			
		||||
				ChatId:    "b646d975-0c9c-4872-9f41-8b1e57181063",
 | 
			
		||||
				ChatType:  "Buyer_Seller",
 | 
			
		||||
				MessageId: "3000000000817031942",
 | 
			
		||||
				CreatedAt: core.TimeFromString(t, "2006-01-02T15:04:05Z", "2022-07-18T20:58:04.528Z"),
 | 
			
		||||
				User: User{
 | 
			
		||||
					Id:   "115568",
 | 
			
		||||
					Type: "Сustomer",
 | 
			
		||||
				},
 | 
			
		||||
				SellerId: 7,
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
		raw: `{  
 | 
			
		||||
			"message_type": "TYPE_MESSAGE_READ",
 | 
			
		||||
			"chat_id": "b646d975-0c9c-4872-9f41-8b1e57181063",
 | 
			
		||||
			"chat_type": "Buyer_Seller",
 | 
			
		||||
			"message_id": "3000000000817031942",
 | 
			
		||||
			"created_at": "2022-07-18T20:58:04.528Z",    
 | 
			
		||||
			"user": {
 | 
			
		||||
				"id": "115568",
 | 
			
		||||
				"type": "Сustomer"
 | 
			
		||||
			},
 | 
			
		||||
			"last_read_message_id": "3000000000817031942",
 | 
			
		||||
			"seller_id": 7
 | 
			
		||||
		}`,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func chatClosedTest(t *testing.T) testData {
 | 
			
		||||
	return testData{
 | 
			
		||||
		object: &ChatClosed{
 | 
			
		||||
			Common:   Common{MessageType: ChatClosedType},
 | 
			
		||||
			ChatId:   "b646d975-0c9c-4872-9f41-8b1e57181063",
 | 
			
		||||
			ChatType: "Buyer_Seller",
 | 
			
		||||
			User:     User{Id: "115568", Type: "Customer"},
 | 
			
		||||
			SellerId: 7,
 | 
			
		||||
		},
 | 
			
		||||
		raw: `{  
 | 
			
		||||
			"message_type": "TYPE_CHAT_CLOSED",
 | 
			
		||||
			"chat_id": "b646d975-0c9c-4872-9f41-8b1e57181063",
 | 
			
		||||
			"chat_type": "Buyer_Seller",
 | 
			
		||||
			"user": {
 | 
			
		||||
				"id": "115568",
 | 
			
		||||
				"type": "Customer"
 | 
			
		||||
			},
 | 
			
		||||
			"seller_id": 7
 | 
			
		||||
		}`,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestNotificationServer(t *testing.T) {
 | 
			
		||||
	testCases := []struct {
 | 
			
		||||
		request  string
 | 
			
		||||
		request  testData
 | 
			
		||||
		response string
 | 
			
		||||
	}{
 | 
			
		||||
		// PING
 | 
			
		||||
		{
 | 
			
		||||
			`{
 | 
			
		||||
				"message_type": "TYPE_PING",
 | 
			
		||||
				"time": "2019-08-24T14:15:22Z"
 | 
			
		||||
			}`,
 | 
			
		||||
			pingTest(t),
 | 
			
		||||
			`{
 | 
			
		||||
				"version": "1.0",
 | 
			
		||||
				"name": "Ozon Seller API"
 | 
			
		||||
			}`,
 | 
			
		||||
		},
 | 
			
		||||
		// REGISTERED HANDLER
 | 
			
		||||
		{
 | 
			
		||||
			`{  
 | 
			
		||||
				"message_type": "TYPE_CHAT_CLOSED",
 | 
			
		||||
				"chat_id": "b646d975-0c9c-4872-9f41-8b1e57181063",
 | 
			
		||||
				"chat_type": "Buyer_Seller",
 | 
			
		||||
				"user": {
 | 
			
		||||
					"id": "115568",
 | 
			
		||||
					"type": "Сustomer"
 | 
			
		||||
				},
 | 
			
		||||
				"seller_id": "7"
 | 
			
		||||
			}`,
 | 
			
		||||
			newPostingTest(t),
 | 
			
		||||
			`{
 | 
			
		||||
				"result": true
 | 
			
		||||
			}`,
 | 
			
		||||
		},
 | 
			
		||||
		// UNREGISTERED HANDLER
 | 
			
		||||
		{
 | 
			
		||||
			`{  
 | 
			
		||||
				"message_type": "TYPE_MESSAGE_READ",
 | 
			
		||||
				"chat_id": "b646d975-0c9c-4872-9f41-8b1e57181063",
 | 
			
		||||
				"chat_type": "Buyer_Seller",
 | 
			
		||||
				"message_id": "3000000000817031942",
 | 
			
		||||
				"created_at": "2022-07-18T20:58:04.528Z",    
 | 
			
		||||
				"user": {
 | 
			
		||||
					"id": "115568",
 | 
			
		||||
					"type": "Сustomer"
 | 
			
		||||
				},
 | 
			
		||||
				"last_read_message_id": "3000000000817031942",
 | 
			
		||||
				"seller_id": "7"
 | 
			
		||||
			postingCancelledTest(t),
 | 
			
		||||
			`{
 | 
			
		||||
				"result": true
 | 
			
		||||
			}`,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			stateChangedTest(t),
 | 
			
		||||
			`{
 | 
			
		||||
				"result": true
 | 
			
		||||
			}`,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			cutoffDateChangedTest(t),
 | 
			
		||||
			`{
 | 
			
		||||
				"result": true
 | 
			
		||||
			}`,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			deliveryDateChangedTest(t),
 | 
			
		||||
			`{
 | 
			
		||||
				"result": true
 | 
			
		||||
			}`,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			createUpdateItemTest(t),
 | 
			
		||||
			`{
 | 
			
		||||
				"result": true
 | 
			
		||||
			}`,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			priceIndexChangedTest(t),
 | 
			
		||||
			`{
 | 
			
		||||
				"result": true
 | 
			
		||||
			}`,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			stocksChangedTest(t),
 | 
			
		||||
			`{
 | 
			
		||||
				"result": true
 | 
			
		||||
			}`,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			newMessageTest(t),
 | 
			
		||||
			`{
 | 
			
		||||
				"result": true
 | 
			
		||||
			}`,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			updateMessageTest(t),
 | 
			
		||||
			`{
 | 
			
		||||
				"result": true
 | 
			
		||||
			}`,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			messageReadTest(t),
 | 
			
		||||
			`{
 | 
			
		||||
				"result": true
 | 
			
		||||
			}`,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			chatClosedTest(t),
 | 
			
		||||
			`{
 | 
			
		||||
				"result": true
 | 
			
		||||
			}`,
 | 
			
		||||
@@ -69,13 +465,18 @@ func TestNotificationServer(t *testing.T) {
 | 
			
		||||
 | 
			
		||||
	client := http.Client{}
 | 
			
		||||
	server := NewNotificationServer(port)
 | 
			
		||||
	server.Register(ChatClosedType, func(req interface{}) error {
 | 
			
		||||
		_, ok := req.(*ChatClosed)
 | 
			
		||||
		if !ok {
 | 
			
		||||
			return fmt.Errorf("req is not of ChatClosed type")
 | 
			
		||||
		}
 | 
			
		||||
		return nil
 | 
			
		||||
	})
 | 
			
		||||
	server.Register(NewPostingType, comparatorWith(newPostingTest(t).object))
 | 
			
		||||
	server.Register(PostingCancelledType, comparatorWith(postingCancelledTest(t).object))
 | 
			
		||||
	server.Register(StateChangedType, comparatorWith(stateChangedTest(t).object))
 | 
			
		||||
	server.Register(CutoffDateChangedType, comparatorWith(cutoffDateChangedTest(t).object))
 | 
			
		||||
	server.Register(DeliveryDateChangedType, comparatorWith(deliveryDateChangedTest(t).object))
 | 
			
		||||
	server.Register(CreateOrUpdateType, comparatorWith(createUpdateItemTest(t).object))
 | 
			
		||||
	server.Register(PriceIndexChangedType, comparatorWith(priceIndexChangedTest(t).object))
 | 
			
		||||
	server.Register(StocksChangedType, comparatorWith(stocksChangedTest(t).object))
 | 
			
		||||
	server.Register(NewMessageType, comparatorWith(newMessageTest(t).object))
 | 
			
		||||
	server.Register(UpdateMessageType, comparatorWith(updateMessageTest(t).object))
 | 
			
		||||
	server.Register(MessageReadType, comparatorWith(messageReadTest(t).object))
 | 
			
		||||
	server.Register(ChatClosedType, comparatorWith(chatClosedTest(t).object))
 | 
			
		||||
	go func() {
 | 
			
		||||
		if err := server.Run(); err != nil {
 | 
			
		||||
			t.Fatalf("notification server is down: %s", err)
 | 
			
		||||
@@ -87,7 +488,7 @@ func TestNotificationServer(t *testing.T) {
 | 
			
		||||
	time.Sleep(3 * time.Second)
 | 
			
		||||
 | 
			
		||||
	for _, testCase := range testCases {
 | 
			
		||||
		httpResp, err := client.Post(fmt.Sprintf("http://0.0.0.0:%d/", port), "application/json", strings.NewReader(testCase.request))
 | 
			
		||||
		httpResp, err := client.Post(fmt.Sprintf("http://0.0.0.0:%d/", port), "application/json", strings.NewReader(testCase.request.raw))
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			t.Error(err)
 | 
			
		||||
			continue
 | 
			
		||||
@@ -106,6 +507,9 @@ func TestNotificationServer(t *testing.T) {
 | 
			
		||||
			t.Error(err)
 | 
			
		||||
		}
 | 
			
		||||
		err = json.Unmarshal([]byte(testCase.response), &expected)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			t.Error(err)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if err := compare(expected, got); err != nil {
 | 
			
		||||
			t.Error(err)
 | 
			
		||||
@@ -131,3 +535,12 @@ func getFreePort() int {
 | 
			
		||||
 | 
			
		||||
	return listener.Addr().(*net.TCPAddr).Port
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func comparatorWith(v1 interface{}) func(v2 interface{}) error {
 | 
			
		||||
	return func(v2 interface{}) error {
 | 
			
		||||
		if !reflect.DeepEqual(v1, v2) {
 | 
			
		||||
			return fmt.Errorf("objects are not equal:\n got: %#v,\n want: %#v", v2, v1)
 | 
			
		||||
		}
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -42,7 +42,7 @@ type NewPosting struct {
 | 
			
		||||
	WarehouseId int64 `json:"warehouse_id"`
 | 
			
		||||
 | 
			
		||||
	// Seller identifier
 | 
			
		||||
	SellerId string `json:"seller_id"`
 | 
			
		||||
	SellerId int64 `json:"seller_id"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type Product struct {
 | 
			
		||||
@@ -79,7 +79,7 @@ type PostingCancelled struct {
 | 
			
		||||
	WarehouseId int64 `json:"warehouse_id"`
 | 
			
		||||
 | 
			
		||||
	// Seller identifier
 | 
			
		||||
	SellerId string `json:"seller_id"`
 | 
			
		||||
	SellerId int64 `json:"seller_id"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type Reason struct {
 | 
			
		||||
@@ -101,13 +101,13 @@ type StateChanged struct {
 | 
			
		||||
	NewState string `json:"new_state"`
 | 
			
		||||
 | 
			
		||||
	// Date and time when the shipment status was changed in UTC format
 | 
			
		||||
	ChangedStateDate time.Time `json:"chagned_state_date"`
 | 
			
		||||
	ChangedStateDate time.Time `json:"changed_state_date"`
 | 
			
		||||
 | 
			
		||||
	// Warehouse identifier where the products for this shipment are stored
 | 
			
		||||
	WarehouseId int64 `json:"warehouse_id"`
 | 
			
		||||
 | 
			
		||||
	// Seller identifier
 | 
			
		||||
	SellerId string `json:"seller_id"`
 | 
			
		||||
	SellerId int64 `json:"seller_id"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Shipment shipping date change
 | 
			
		||||
@@ -127,7 +127,7 @@ type CutoffDateChanged struct {
 | 
			
		||||
	WarehouseId int64 `json:"warehouse_id"`
 | 
			
		||||
 | 
			
		||||
	// Seller identifier
 | 
			
		||||
	SellerId string `json:"seller_id"`
 | 
			
		||||
	SellerId int64 `json:"seller_id"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Shipment delivery date change
 | 
			
		||||
@@ -153,7 +153,7 @@ type DeliveryDateChanged struct {
 | 
			
		||||
	WarehouseId int64 `json:"warehouse_id"`
 | 
			
		||||
 | 
			
		||||
	// Seller identifier
 | 
			
		||||
	SellerId string `json:"seller_id"`
 | 
			
		||||
	SellerId int64 `json:"seller_id"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Product creation and update or processing error
 | 
			
		||||
@@ -173,7 +173,7 @@ type CreateOrUpdateItem struct {
 | 
			
		||||
	ChangedAt time.Time `json:"changed_at"`
 | 
			
		||||
 | 
			
		||||
	// Seller identifier
 | 
			
		||||
	SellerId string `json:"seller_id"`
 | 
			
		||||
	SellerId int64 `json:"seller_id"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Product price index change
 | 
			
		||||
@@ -193,7 +193,7 @@ type PriceIndexChanged struct {
 | 
			
		||||
	PriceIndex int64 `json:"price_index"`
 | 
			
		||||
 | 
			
		||||
	// Seller identifier
 | 
			
		||||
	SellerId string `json:"seller_id"`
 | 
			
		||||
	SellerId int64 `json:"seller_id"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Stock change at the seller's warehouse
 | 
			
		||||
@@ -204,7 +204,7 @@ type StocksChanged struct {
 | 
			
		||||
	Items []Item `json:"items"`
 | 
			
		||||
 | 
			
		||||
	// Seller identifier
 | 
			
		||||
	SellerId string `json:"seller_id"`
 | 
			
		||||
	SellerId int64 `json:"seller_id"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type Item struct {
 | 
			
		||||
@@ -255,7 +255,7 @@ type NewMessage struct {
 | 
			
		||||
	Data []string `json:"data"`
 | 
			
		||||
 | 
			
		||||
	// Seller identifier
 | 
			
		||||
	SellerId string `json:"seller_id"`
 | 
			
		||||
	SellerId int64 `json:"seller_id"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type User struct {
 | 
			
		||||
@@ -295,14 +295,8 @@ type ChatClosed struct {
 | 
			
		||||
	// Information about the user who closed the chat
 | 
			
		||||
	User User `json:"user"`
 | 
			
		||||
 | 
			
		||||
	// User identifier
 | 
			
		||||
	Id string `json:"id"`
 | 
			
		||||
 | 
			
		||||
	// User type
 | 
			
		||||
	Type string `json:"type"`
 | 
			
		||||
 | 
			
		||||
	// Seller identifier
 | 
			
		||||
	SellerId string `json:"seller_id"`
 | 
			
		||||
	SellerId int64 `json:"seller_id"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type Response struct {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user