package resultprocessor_test import ( "testing" "queryorchestration/internal/database/repository" resultprocessor "queryorchestration/internal/query/result/processor" "github.com/google/uuid" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestParseDBCollectorQuery(t *testing.T) { id := "hello" version := int32(1) dbResult := repository.ListCollectorQueriesRow{ Clientid: &id, Queryid: &uuid.UUID{}, Requiredids: []uuid.UUID{}, Querytype: repository.NullQuerytype{ Querytype: repository.QuerytypeJsonExtractor, Valid: true, }, Queryversion: &version, } value, err := resultprocessor.ParseDBCollectorQuery(&dbResult) require.NoError(t, err) assert.Equal(t, uuid.Nil, value.ID) assert.Nil(t, value.RequiredQueryIDs) assert.Equal(t, int32(1), value.Version) assert.Equal(t, resultprocessor.Type(resultprocessor.TypeJsonExtractor), value.Type) dbResult.Querytype = repository.NullQuerytype{} _, err = resultprocessor.ParseDBCollectorQuery(&dbResult) assert.EqualError(t, err, "invalid database query type") } func TestParseDBNullType(t *testing.T) { qType := repository.NullQuerytype{Valid: true, Querytype: repository.QuerytypeJsonExtractor} value, err := resultprocessor.ParseDBNullType(qType) require.NoError(t, err) assert.Equal(t, resultprocessor.Type(resultprocessor.TypeJsonExtractor), value) qType = repository.NullQuerytype{} _, err = resultprocessor.ParseDBNullType(qType) assert.EqualError(t, err, "invalid database query type") qType = repository.NullQuerytype{Valid: true} _, err = resultprocessor.ParseDBNullType(qType) assert.EqualError(t, err, "invalid database query type") } func TestParseDBType(t *testing.T) { qType := repository.QuerytypeJsonExtractor value, err := resultprocessor.ParseDBType(qType) require.NoError(t, err) assert.Equal(t, resultprocessor.Type(resultprocessor.TypeJsonExtractor), value) qType = repository.QuerytypeContextFull value, err = resultprocessor.ParseDBType(qType) require.NoError(t, err) assert.Equal(t, resultprocessor.Type(resultprocessor.TypeContextFull), value) } func TestToDBQueryType(t *testing.T) { dbQueryType := resultprocessor.Type(resultprocessor.TypeJsonExtractor) value, err := resultprocessor.ToDBQueryType(dbQueryType) require.NoError(t, err) assert.Equal(t, repository.Querytype(repository.QuerytypeJsonExtractor), value) dbQueryType = resultprocessor.Type(-1) _, err = resultprocessor.ToDBQueryType(dbQueryType) assert.EqualError(t, err, "invalid database query type") dbQueryType = resultprocessor.Type(resultprocessor.TypeContextFull) value, err = resultprocessor.ToDBQueryType(dbQueryType) require.NoError(t, err) assert.Equal(t, repository.Querytype(repository.QuerytypeContextFull), value) } func TestToDBQueryTypeArray(t *testing.T) { inArr := []resultprocessor.Type{ resultprocessor.TypeJsonExtractor, resultprocessor.TypeContextFull, } value, err := resultprocessor.ToDBQueryTypeArray(inArr) require.NoError(t, err) assert.Equal(t, []repository.Querytype{ repository.QuerytypeJsonExtractor, repository.QuerytypeContextFull, }, value) inArr = []resultprocessor.Type{ resultprocessor.Type(-1), } _, err = resultprocessor.ToDBQueryTypeArray(inArr) assert.EqualError(t, err, "invalid database query type") } func TestToDBNullQueryType(t *testing.T) { dbQueryType := resultprocessor.Type(resultprocessor.TypeJsonExtractor) value, err := resultprocessor.ToDBNullQueryType(dbQueryType) require.NoError(t, err) assert.Equal(t, repository.NullQuerytype{Valid: true, Querytype: repository.QuerytypeJsonExtractor}, value) dbQueryType = resultprocessor.Type(-1) _, err = resultprocessor.ToDBNullQueryType(dbQueryType) assert.EqualError(t, err, "invalid database query type") dbQueryType = resultprocessor.Type(resultprocessor.TypeContextFull) value, err = resultprocessor.ToDBNullQueryType(dbQueryType) require.NoError(t, err) assert.Equal(t, repository.NullQuerytype{Valid: true, Querytype: repository.QuerytypeContextFull}, value) } func TestParseFullQuery(t *testing.T) { var q *repository.Fullactivequery out, err := resultprocessor.ParseFullQuery(q) require.NoError(t, err) assert.Nil(t, out) q = &repository.Fullactivequery{ Queryid: uuid.New(), Querytype: repository.QuerytypeContextFull, Activeversion: 1, Latestversion: 2, } out, err = resultprocessor.ParseFullQuery(q) require.NoError(t, err) assert.EqualExportedValues(t, resultprocessor.Query{ ID: q.Queryid, Type: resultprocessor.TypeContextFull, Version: 1, }, *out) q = &repository.Fullactivequery{ Queryid: uuid.New(), Querytype: repository.QuerytypeContextFull, Activeversion: 1, Latestversion: 2, Requiredids: []uuid.UUID{}, } out, err = resultprocessor.ParseFullQuery(q) require.NoError(t, err) assert.EqualExportedValues(t, &resultprocessor.Query{ ID: q.Queryid, Type: resultprocessor.TypeContextFull, Version: 1, }, out) q = &repository.Fullactivequery{ Queryid: uuid.New(), Querytype: repository.QuerytypeContextFull, Activeversion: 1, Latestversion: 2, Config: []byte("hello"), Requiredids: []uuid.UUID{ uuid.New(), }, } out, err = resultprocessor.ParseFullQuery(q) require.NoError(t, err) cfg := "hello" assert.EqualExportedValues(t, &resultprocessor.Query{ ID: q.Queryid, Type: resultprocessor.TypeContextFull, Version: 1, Config: &cfg, RequiredQueryIDs: &[]uuid.UUID{q.Requiredids[0]}, }, out) } func TestParseFullQueryArray(t *testing.T) { var q []*repository.Fullactivequery out, err := resultprocessor.ParseFullQueryArray(q) require.NoError(t, err) assert.ElementsMatch(t, []*resultprocessor.Query{}, out) q = []*repository.Fullactivequery{ { Queryid: uuid.New(), Querytype: repository.QuerytypeContextFull, Activeversion: 1, Latestversion: 2, }, } out, err = resultprocessor.ParseFullQueryArray(q) require.NoError(t, err) assert.EqualExportedValues(t, []*resultprocessor.Query{ { ID: q[0].Queryid, Type: resultprocessor.TypeContextFull, Version: 1, }, }, out) }