From d69063636ea85c8906a67537acc3135f07ddf428 Mon Sep 17 00:00:00 2001 From: Rob Mulholand Date: Mon, 10 Sep 2018 16:57:17 -0500 Subject: [PATCH] Add raw log to price feeds --- ...1534275305_create_price_feeds_table.up.sql | 10 +-- .../1534295712_create_tend_table.up.sql | 2 +- db/schema.sql | 19 ++-- pkg/transformers/price_feeds/converter.go | 12 ++- .../price_feeds/converter_test.go | 33 ++----- .../price_feeds/{price_update.go => model.go} | 2 +- pkg/transformers/price_feeds/repository.go | 8 +- .../price_feeds/repository_test.go | 45 +++------- pkg/transformers/price_feeds/transformer.go | 11 ++- .../price_feeds/transformer_test.go | 86 ++++++++++++------- .../test_data/mocks/price_feeds/repository.go | 7 +- pkg/transformers/test_data/price_feed.go | 1 + test_config/test_config.go | 3 + 13 files changed, 118 insertions(+), 121 deletions(-) rename pkg/transformers/price_feeds/{price_update.go => model.go} (96%) diff --git a/db/migrations/1534275305_create_price_feeds_table.up.sql b/db/migrations/1534275305_create_price_feeds_table.up.sql index a6b6f9a0..408417fe 100644 --- a/db/migrations/1534275305_create_price_feeds_table.up.sql +++ b/db/migrations/1534275305_create_price_feeds_table.up.sql @@ -1,12 +1,10 @@ CREATE TABLE maker.price_feeds ( id SERIAL PRIMARY KEY, block_number BIGINT NOT NULL, - header_id INTEGER NOT NULL, + header_id INTEGER NOT NULL REFERENCES headers (id) ON DELETE CASCADE, medianizer_address bytea, - tx_idx INTEGER NOT NULL, usd_value NUMERIC, - UNIQUE (header_id, medianizer_address, tx_idx), - CONSTRAINT headers_fk FOREIGN KEY (header_id) - REFERENCES headers (id) - ON DELETE CASCADE + tx_idx INTEGER NOT NULL, + raw_log JSONB, + UNIQUE (header_id, medianizer_address, tx_idx) ); \ No newline at end of file diff --git a/db/migrations/1534295712_create_tend_table.up.sql b/db/migrations/1534295712_create_tend_table.up.sql index 62ce46ea..8b19cfea 100644 --- a/db/migrations/1534295712_create_tend_table.up.sql +++ b/db/migrations/1534295712_create_tend_table.up.sql @@ -1,7 +1,7 @@ CREATE TABLE maker.tend ( db_id SERIAL PRIMARY KEY, header_id INTEGER NOT NULL REFERENCES headers (id) ON DELETE CASCADE, - bid_id NUMERIC NOT NULL UNIQUE, + bid_id NUMERIC NOT NULL UNIQUE, lot NUMERIC, bid NUMERIC, guy VARCHAR, diff --git a/db/schema.sql b/db/schema.sql index 0f3d56b1..09664db5 100644 --- a/db/schema.sql +++ b/db/schema.sql @@ -409,8 +409,9 @@ CREATE TABLE maker.price_feeds ( block_number bigint NOT NULL, header_id integer NOT NULL, medianizer_address bytea, + usd_value numeric, tx_idx integer NOT NULL, - usd_value numeric + raw_log jsonb ); @@ -1425,14 +1426,6 @@ ALTER TABLE ONLY maker.frob ADD CONSTRAINT frob_header_id_fkey FOREIGN KEY (header_id) REFERENCES public.headers(id) ON DELETE CASCADE; --- --- Name: price_feeds headers_fk; Type: FK CONSTRAINT; Schema: maker; Owner: - --- - -ALTER TABLE ONLY maker.price_feeds - ADD CONSTRAINT headers_fk FOREIGN KEY (header_id) REFERENCES public.headers(id) ON DELETE CASCADE; - - -- -- Name: pit_file_debt_ceiling pit_file_debt_ceiling_header_id_fkey; Type: FK CONSTRAINT; Schema: maker; Owner: - -- @@ -1457,6 +1450,14 @@ ALTER TABLE ONLY maker.pit_file_stability_fee ADD CONSTRAINT pit_file_stability_fee_header_id_fkey FOREIGN KEY (header_id) REFERENCES public.headers(id) ON DELETE CASCADE; +-- +-- Name: price_feeds price_feeds_header_id_fkey; Type: FK CONSTRAINT; Schema: maker; Owner: - +-- + +ALTER TABLE ONLY maker.price_feeds + ADD CONSTRAINT price_feeds_header_id_fkey FOREIGN KEY (header_id) REFERENCES public.headers(id) ON DELETE CASCADE; + + -- -- Name: tend tend_header_id_fkey; Type: FK CONSTRAINT; Schema: maker; Owner: - -- diff --git a/pkg/transformers/price_feeds/converter.go b/pkg/transformers/price_feeds/converter.go index 443d9944..25d1bc6c 100644 --- a/pkg/transformers/price_feeds/converter.go +++ b/pkg/transformers/price_feeds/converter.go @@ -15,18 +15,24 @@ package price_feeds import ( + "encoding/json" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/core/types" ) +type Converter interface { + ToModel(log types.Log, headerID int64) (PriceFeedModel, error) +} + type PriceFeedConverter struct{} -func (converter PriceFeedConverter) ToModel(log types.Log, headerID int64) PriceFeedModel { +func (converter PriceFeedConverter) ToModel(log types.Log, headerID int64) (PriceFeedModel, error) { + raw, err := json.Marshal(log) return PriceFeedModel{ BlockNumber: log.BlockNumber, - HeaderID: headerID, MedianizerAddress: log.Address.Bytes(), UsdValue: Convert("wad", hexutil.Encode(log.Data), 15), TransactionIndex: log.TxIndex, - } + Raw: raw, + }, err } diff --git a/pkg/transformers/price_feeds/converter_test.go b/pkg/transformers/price_feeds/converter_test.go index 89111265..9baa9025 100644 --- a/pkg/transformers/price_feeds/converter_test.go +++ b/pkg/transformers/price_feeds/converter_test.go @@ -15,44 +15,21 @@ package price_feeds_test import ( - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" "github.com/vulcanize/vulcanizedb/pkg/transformers/price_feeds" - "github.com/vulcanize/vulcanizedb/pkg/transformers/shared" + "github.com/vulcanize/vulcanizedb/pkg/transformers/test_data" ) -var _ = Describe("Price feed converter", func() { +var _ = Describe("Price feed Converter", func() { It("converts a log to a price feed model", func() { - medianizerAddress := common.HexToAddress("0x99041f808d598b782d5a3e498681c2452a31da08") - blockNumber := uint64(6147230) - txIndex := uint(119) - // https://etherscan.io/tx/0xa51a50a2adbfba4e2ab3d72dfd67a21c769f1bc8d2b180663a15500a56cde58f - log := types.Log{ - Address: medianizerAddress, - Topics: []common.Hash{common.HexToHash(shared.LogValueSignature)}, - Data: common.FromHex("00000000000000000000000000000000000000000000001486f658319fb0c100"), - BlockNumber: blockNumber, - TxHash: common.HexToHash("0xa51a50a2adbfba4e2ab3d72dfd67a21c769f1bc8d2b180663a15500a56cde58f"), - TxIndex: txIndex, - BlockHash: common.HexToHash("0x27ecebbf69eefa3bb3cf65f472322a80ff4946653a50a2171dc605f49829467d"), - Index: 0, - Removed: false, - } converter := price_feeds.PriceFeedConverter{} headerID := int64(123) - model := converter.ToModel(log, headerID) + model, err := converter.ToModel(test_data.EthPriceFeedLog, headerID) - expectedModel := price_feeds.PriceFeedModel{ - BlockNumber: blockNumber, - HeaderID: headerID, - MedianizerAddress: medianizerAddress[:], - UsdValue: "378.6599388897", - TransactionIndex: txIndex, - } - Expect(model).To(Equal(expectedModel)) + Expect(err).NotTo(HaveOccurred()) + Expect(model).To(Equal(test_data.PriceFeedModel)) }) }) diff --git a/pkg/transformers/price_feeds/price_update.go b/pkg/transformers/price_feeds/model.go similarity index 96% rename from pkg/transformers/price_feeds/price_update.go rename to pkg/transformers/price_feeds/model.go index 8b8559d2..d61a2b64 100644 --- a/pkg/transformers/price_feeds/price_update.go +++ b/pkg/transformers/price_feeds/model.go @@ -26,10 +26,10 @@ type LogValueEntity struct { type PriceFeedModel struct { BlockNumber uint64 `db:"block_number"` - HeaderID int64 `db:"header_id"` MedianizerAddress []byte `db:"medianizer_address"` UsdValue string `db:"usd_value"` TransactionIndex uint `db:"tx_idx"` + Raw []byte `db:"raw_log"` } func Convert(conversion string, value string, prec int) string { diff --git a/pkg/transformers/price_feeds/repository.go b/pkg/transformers/price_feeds/repository.go index 77ea16e5..9293927a 100644 --- a/pkg/transformers/price_feeds/repository.go +++ b/pkg/transformers/price_feeds/repository.go @@ -20,7 +20,7 @@ import ( ) type IPriceFeedRepository interface { - Create(model PriceFeedModel) error + Create(headerID int64, model PriceFeedModel) error MissingHeaders(startingBlockNumber, endingBlockNumber int64) ([]core.Header, error) } @@ -32,9 +32,9 @@ func NewPriceFeedRepository(db *postgres.DB) PriceFeedRepository { return PriceFeedRepository{db: db} } -func (repository PriceFeedRepository) Create(model PriceFeedModel) error { - _, err := repository.db.Exec(`INSERT INTO maker.price_feeds (block_number, header_id, medianizer_address, usd_value, tx_idx) - VALUES ($1, $2, $3, $4::NUMERIC, $5)`, model.BlockNumber, model.HeaderID, model.MedianizerAddress, model.UsdValue, model.TransactionIndex) +func (repository PriceFeedRepository) Create(headerID int64, model PriceFeedModel) error { + _, err := repository.db.Exec(`INSERT INTO maker.price_feeds (block_number, header_id, medianizer_address, usd_value, tx_idx, raw_log) + VALUES ($1, $2, $3, $4::NUMERIC, $5, $6)`, model.BlockNumber, headerID, model.MedianizerAddress, model.UsdValue, model.TransactionIndex, model.Raw) return err } diff --git a/pkg/transformers/price_feeds/repository_test.go b/pkg/transformers/price_feeds/repository_test.go index dffa4b17..e2270132 100644 --- a/pkg/transformers/price_feeds/repository_test.go +++ b/pkg/transformers/price_feeds/repository_test.go @@ -21,6 +21,7 @@ import ( "github.com/vulcanize/vulcanizedb/pkg/core" "github.com/vulcanize/vulcanizedb/pkg/datastore/postgres/repositories" "github.com/vulcanize/vulcanizedb/pkg/transformers/price_feeds" + "github.com/vulcanize/vulcanizedb/pkg/transformers/test_data" "github.com/vulcanize/vulcanizedb/test_config" ) @@ -30,26 +31,21 @@ var _ = Describe("Price feeds repository", func() { db := test_config.NewTestDB(core.Node{}) test_config.CleanTestDB(db) headerRepository := repositories.NewHeaderRepository(db) - blockNumber := uint64(12345) - header := core.Header{BlockNumber: int64(blockNumber)} - headerID, err := headerRepository.CreateOrUpdateHeader(header) + headerID, err := headerRepository.CreateOrUpdateHeader(core.Header{}) Expect(err).NotTo(HaveOccurred()) - priceFeedUpdate := price_feeds.PriceFeedModel{ - BlockNumber: blockNumber, - HeaderID: headerID, - MedianizerAddress: []byte{1, 2, 3, 4, 5}, - UsdValue: "123.45", - TransactionIndex: 1, - } priceFeedRepository := price_feeds.NewPriceFeedRepository(db) - err = priceFeedRepository.Create(priceFeedUpdate) + err = priceFeedRepository.Create(headerID, test_data.PriceFeedModel) Expect(err).NotTo(HaveOccurred()) var dbPriceFeedUpdate price_feeds.PriceFeedModel - err = db.Get(&dbPriceFeedUpdate, `SELECT block_number, header_id, medianizer_address, usd_value, tx_idx FROM maker.price_feeds WHERE header_id = $1`, headerID) + err = db.Get(&dbPriceFeedUpdate, `SELECT block_number, medianizer_address, usd_value, tx_idx, raw_log FROM maker.price_feeds WHERE header_id = $1`, headerID) Expect(err).NotTo(HaveOccurred()) - Expect(dbPriceFeedUpdate).To(Equal(priceFeedUpdate)) + Expect(dbPriceFeedUpdate.BlockNumber).To(Equal(test_data.PriceFeedModel.BlockNumber)) + Expect(dbPriceFeedUpdate.MedianizerAddress).To(Equal(test_data.PriceFeedModel.MedianizerAddress)) + Expect(dbPriceFeedUpdate.UsdValue).To(Equal(test_data.PriceFeedModel.UsdValue)) + Expect(dbPriceFeedUpdate.TransactionIndex).To(Equal(test_data.PriceFeedModel.TransactionIndex)) + Expect(dbPriceFeedUpdate.Raw).To(MatchJSON(test_data.PriceFeedModel.Raw)) }) It("does not duplicate price feed updates", func() { @@ -60,18 +56,11 @@ var _ = Describe("Price feeds repository", func() { header := core.Header{BlockNumber: int64(blockNumber)} headerID, err := headerRepository.CreateOrUpdateHeader(header) Expect(err).NotTo(HaveOccurred()) - priceFeedUpdate := price_feeds.PriceFeedModel{ - BlockNumber: blockNumber, - HeaderID: headerID, - MedianizerAddress: []byte{1, 2, 3, 4, 5}, - UsdValue: "123.45", - TransactionIndex: 1, - } priceFeedRepository := price_feeds.NewPriceFeedRepository(db) - err = priceFeedRepository.Create(priceFeedUpdate) + err = priceFeedRepository.Create(headerID, test_data.PriceFeedModel) Expect(err).NotTo(HaveOccurred()) - err = priceFeedRepository.Create(priceFeedUpdate) + err = priceFeedRepository.Create(headerID, test_data.PriceFeedModel) Expect(err).To(HaveOccurred()) }) @@ -94,12 +83,7 @@ var _ = Describe("Price feeds repository", func() { Expect(err).NotTo(HaveOccurred()) } priceFeedRepository := price_feeds.NewPriceFeedRepository(db) - priceFeedUpdate := price_feeds.PriceFeedModel{ - BlockNumber: uint64(blockNumbers[1]), - HeaderID: headerIDs[1], - UsdValue: "123.45", - } - err := priceFeedRepository.Create(priceFeedUpdate) + err := priceFeedRepository.Create(headerIDs[1], test_data.PriceFeedModel) Expect(err).NotTo(HaveOccurred()) headers, err := priceFeedRepository.MissingHeaders(startingBlockNumber, endingBlockNumber) @@ -129,10 +113,7 @@ var _ = Describe("Price feeds repository", func() { } priceFeedRepository := price_feeds.NewPriceFeedRepository(db) priceFeedRepositoryTwo := price_feeds.NewPriceFeedRepository(dbTwo) - err := priceFeedRepository.Create(price_feeds.PriceFeedModel{ - HeaderID: headerIDs[0], - UsdValue: "123.45", - }) + err := priceFeedRepository.Create(headerIDs[0], test_data.PriceFeedModel) Expect(err).NotTo(HaveOccurred()) nodeOneMissingHeaders, err := priceFeedRepository.MissingHeaders(blockNumbers[0], blockNumbers[len(blockNumbers)-1]) diff --git a/pkg/transformers/price_feeds/transformer.go b/pkg/transformers/price_feeds/transformer.go index 5261f0f1..4cff92f9 100644 --- a/pkg/transformers/price_feeds/transformer.go +++ b/pkg/transformers/price_feeds/transformer.go @@ -30,7 +30,7 @@ func (initializer PriceFeedTransformerInitializer) NewPriceFeedTransformer(db *p repository := NewPriceFeedRepository(db) return PriceFeedTransformer{ Config: initializer.Config, - converter: converter, + Converter: converter, Fetcher: fetcher, Repository: repository, } @@ -38,7 +38,7 @@ func (initializer PriceFeedTransformerInitializer) NewPriceFeedTransformer(db *p type PriceFeedTransformer struct { Config IPriceFeedConfig - converter PriceFeedConverter + Converter Converter Fetcher IPriceFeedFetcher Repository IPriceFeedRepository } @@ -54,8 +54,11 @@ func (transformer PriceFeedTransformer) Execute() error { return err } for _, log := range logs { - model := transformer.converter.ToModel(log, header.Id) - err = transformer.Repository.Create(model) + model, err := transformer.Converter.ToModel(log, header.Id) + if err != nil { + return err + } + err = transformer.Repository.Create(header.Id, model) if err != nil { return err } diff --git a/pkg/transformers/price_feeds/transformer_test.go b/pkg/transformers/price_feeds/transformer_test.go index 263dc80d..50ccf80e 100644 --- a/pkg/transformers/price_feeds/transformer_test.go +++ b/pkg/transformers/price_feeds/transformer_test.go @@ -15,10 +15,6 @@ package price_feeds_test import ( - "fmt" - "math/big" - - "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" @@ -26,14 +22,17 @@ import ( "github.com/vulcanize/vulcanizedb/pkg/core" "github.com/vulcanize/vulcanizedb/pkg/fakes" "github.com/vulcanize/vulcanizedb/pkg/transformers/price_feeds" + "github.com/vulcanize/vulcanizedb/pkg/transformers/test_data" price_feeds_mocks "github.com/vulcanize/vulcanizedb/pkg/transformers/test_data/mocks/price_feeds" ) var _ = Describe("Price feed transformer", func() { It("gets missing headers for price feeds", func() { + mockConverter := &price_feeds_mocks.MockPriceFeedConverter{} mockRepository := &price_feeds_mocks.MockPriceFeedRepository{} transformer := price_feeds.PriceFeedTransformer{ Config: price_feeds.PriceFeedConfig, + Converter: mockConverter, Fetcher: &price_feeds_mocks.MockPriceFeedFetcher{}, Repository: mockRepository, } @@ -45,9 +44,11 @@ var _ = Describe("Price feed transformer", func() { }) It("returns error is missing headers call returns err", func() { + mockConverter := &price_feeds_mocks.MockPriceFeedConverter{} mockRepository := &price_feeds_mocks.MockPriceFeedRepository{} mockRepository.SetMissingHeadersErr(fakes.FakeError) transformer := price_feeds.PriceFeedTransformer{ + Converter: mockConverter, Fetcher: &price_feeds_mocks.MockPriceFeedFetcher{}, Repository: mockRepository, } @@ -59,12 +60,14 @@ var _ = Describe("Price feed transformer", func() { }) It("fetches logs for missing headers", func() { + mockConverter := &price_feeds_mocks.MockPriceFeedConverter{} mockRepository := &price_feeds_mocks.MockPriceFeedRepository{} blockNumberOne := int64(1) blockNumberTwo := int64(2) mockRepository.SetMissingHeaders([]core.Header{{BlockNumber: blockNumberOne}, {BlockNumber: blockNumberTwo}}) mockFetcher := &price_feeds_mocks.MockPriceFeedFetcher{} transformer := price_feeds.PriceFeedTransformer{ + Converter: mockConverter, Fetcher: mockFetcher, Repository: mockRepository, } @@ -76,11 +79,13 @@ var _ = Describe("Price feed transformer", func() { }) It("returns err if fetcher returns err", func() { + mockConverter := &price_feeds_mocks.MockPriceFeedConverter{} mockRepository := &price_feeds_mocks.MockPriceFeedRepository{} mockRepository.SetMissingHeaders([]core.Header{{BlockNumber: 1}}) mockFetcher := &price_feeds_mocks.MockPriceFeedFetcher{} mockFetcher.SetReturnErr(fakes.FakeError) transformer := price_feeds.PriceFeedTransformer{ + Converter: mockConverter, Fetcher: mockFetcher, Repository: mockRepository, } @@ -91,31 +96,55 @@ var _ = Describe("Price feed transformer", func() { Expect(err).To(MatchError(fakes.FakeError)) }) + It("converts log to a model", func() { + mockConverter := &price_feeds_mocks.MockPriceFeedConverter{} + mockFetcher := &price_feeds_mocks.MockPriceFeedFetcher{} + mockFetcher.SetReturnLogs([]types.Log{test_data.EthPriceFeedLog}) + mockRepository := &price_feeds_mocks.MockPriceFeedRepository{} + headerID := int64(11111) + mockRepository.SetMissingHeaders([]core.Header{{BlockNumber: 1, Id: headerID}}) + transformer := price_feeds.PriceFeedTransformer{ + Fetcher: mockFetcher, + Converter: mockConverter, + Repository: mockRepository, + } + + err := transformer.Execute() + + Expect(err).NotTo(HaveOccurred()) + Expect(mockConverter.PassedHeaderID).To(Equal(headerID)) + Expect(mockConverter.PassedLog).To(Equal(test_data.EthPriceFeedLog)) + }) + + It("returns err if converter returns err", func() { + mockConverter := &price_feeds_mocks.MockPriceFeedConverter{} + mockConverter.SetConverterErr(fakes.FakeError) + mockFetcher := &price_feeds_mocks.MockPriceFeedFetcher{} + mockFetcher.SetReturnLogs([]types.Log{test_data.EthPriceFeedLog}) + mockRepository := &price_feeds_mocks.MockPriceFeedRepository{} + headerID := int64(11111) + mockRepository.SetMissingHeaders([]core.Header{{BlockNumber: 1, Id: headerID}}) + transformer := price_feeds.PriceFeedTransformer{ + Fetcher: mockFetcher, + Converter: mockConverter, + Repository: mockRepository, + } + + err := transformer.Execute() + + Expect(err).To(HaveOccurred()) + Expect(err).To(MatchError(fakes.FakeError)) + }) + It("persists model converted from log", func() { + mockConverter := &price_feeds_mocks.MockPriceFeedConverter{} mockRepository := &price_feeds_mocks.MockPriceFeedRepository{} headerID := int64(11111) mockRepository.SetMissingHeaders([]core.Header{{BlockNumber: 1, Id: headerID}}) mockFetcher := &price_feeds_mocks.MockPriceFeedFetcher{} - blockNumber := uint64(22222) - txIndex := uint(33333) - usdValue := int64(44444) - etherMultiplier, _ := price_feeds.Ether.Int64() - rawUsdValue := big.NewInt(0) - rawUsdValue = rawUsdValue.Mul(big.NewInt(usdValue), big.NewInt(etherMultiplier)) - address := common.BytesToAddress([]byte{1, 2, 3, 4, 5}) - fakeLog := types.Log{ - Address: address, - Topics: nil, - Data: rawUsdValue.Bytes(), - BlockNumber: blockNumber, - TxHash: common.Hash{}, - TxIndex: txIndex, - BlockHash: common.Hash{}, - Index: 0, - Removed: false, - } - mockFetcher.SetReturnLogs([]types.Log{fakeLog}) + mockFetcher.SetReturnLogs([]types.Log{test_data.EthPriceFeedLog}) transformer := price_feeds.PriceFeedTransformer{ + Converter: mockConverter, Fetcher: mockFetcher, Repository: mockRepository, } @@ -123,23 +152,18 @@ var _ = Describe("Price feed transformer", func() { err := transformer.Execute() Expect(err).NotTo(HaveOccurred()) - expectedModel := price_feeds.PriceFeedModel{ - BlockNumber: blockNumber, - HeaderID: headerID, - MedianizerAddress: address.Bytes(), - UsdValue: fmt.Sprintf("%d", usdValue), - TransactionIndex: txIndex, - } - mockRepository.AssertCreateCalledWith(expectedModel) + mockRepository.AssertCreateCalledWith(headerID, test_data.PriceFeedModel) }) It("returns error if creating price feed update returns error", func() { + mockConverter := &price_feeds_mocks.MockPriceFeedConverter{} mockRepository := &price_feeds_mocks.MockPriceFeedRepository{} mockRepository.SetMissingHeaders([]core.Header{{BlockNumber: 1, Id: 2}}) mockRepository.SetCreateErr(fakes.FakeError) mockFetcher := &price_feeds_mocks.MockPriceFeedFetcher{} mockFetcher.SetReturnLogs([]types.Log{{}}) transformer := price_feeds.PriceFeedTransformer{ + Converter: mockConverter, Fetcher: mockFetcher, Repository: mockRepository, } diff --git a/pkg/transformers/test_data/mocks/price_feeds/repository.go b/pkg/transformers/test_data/mocks/price_feeds/repository.go index a689c2bb..bd685c77 100644 --- a/pkg/transformers/test_data/mocks/price_feeds/repository.go +++ b/pkg/transformers/test_data/mocks/price_feeds/repository.go @@ -26,6 +26,7 @@ type MockPriceFeedRepository struct { missingHeaders []core.Header missingHeadersErr error passedEndingBlockNumber int64 + passedHeaderID int64 passedModel price_feeds.PriceFeedModel passedStartingBlockNumber int64 } @@ -42,7 +43,8 @@ func (repository *MockPriceFeedRepository) SetMissingHeaders(headers []core.Head repository.missingHeaders = headers } -func (repository *MockPriceFeedRepository) Create(model price_feeds.PriceFeedModel) error { +func (repository *MockPriceFeedRepository) Create(headerID int64, model price_feeds.PriceFeedModel) error { + repository.passedHeaderID = headerID repository.passedModel = model return repository.createErr } @@ -53,7 +55,8 @@ func (repository *MockPriceFeedRepository) MissingHeaders(startingBlockNumber, e return repository.missingHeaders, repository.missingHeadersErr } -func (repository *MockPriceFeedRepository) AssertCreateCalledWith(model price_feeds.PriceFeedModel) { +func (repository *MockPriceFeedRepository) AssertCreateCalledWith(headerID int64, model price_feeds.PriceFeedModel) { + Expect(repository.passedHeaderID).To(Equal(headerID)) Expect(repository.passedModel).To(Equal(model)) } diff --git a/pkg/transformers/test_data/price_feed.go b/pkg/transformers/test_data/price_feed.go index b6d83377..31eac642 100644 --- a/pkg/transformers/test_data/price_feed.go +++ b/pkg/transformers/test_data/price_feed.go @@ -47,4 +47,5 @@ var PriceFeedModel = price_feeds.PriceFeedModel{ MedianizerAddress: EthPriceFeedLog.Address[:], UsdValue: "378.6599388897", TransactionIndex: EthPriceFeedLog.TxIndex, + Raw: rawPriceFeedLog, } diff --git a/test_config/test_config.go b/test_config/test_config.go index 80af9fe4..c01c1686 100644 --- a/test_config/test_config.go +++ b/test_config/test_config.go @@ -84,6 +84,9 @@ func CleanTestDB(db *postgres.DB) { db.MustExec("DELETE FROM maker.pit_file_debt_ceiling") db.MustExec("DELETE FROM maker.pit_file_ilk") db.MustExec("DELETE FROM maker.pit_file_stability_fee") + db.MustExec("DELETE FROM maker.price_feeds") + db.MustExec("DELETE FROM maker.tend") + db.MustExec("DELETE FROM maker.vat_init") db.MustExec("DELETE FROM receipts") db.MustExec("DELETE FROM transactions") db.MustExec("DELETE FROM watched_contracts")