Skip to content

Commit 4d0c3ab

Browse files
authored
Merge pull request #29 from patricoos/master
Release 1.0.17
2 parents d0e7cf4 + a65ce26 commit 4d0c3ab

11 files changed

Lines changed: 791 additions & 197 deletions

File tree

PortaCapena.OdooJsonRpcClient.Example/OdooClientTests.cs

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,27 +30,24 @@ public async Task Can_get_odoo_version()
3030
result.Succeed.Should().BeTrue();
3131
}
3232

33-
3433
[Fact]
3534
public async Task Get_DotNet_model_should_return_string()
3635
{
3736
var odooClient = new OdooClient(TestConfig);
38-
var tableName = "res.partner";
37+
var tableName = "product.product";
3938
var modelResult = await odooClient.GetModelAsync(tableName);
4039

4140
modelResult.Succeed.Should().BeTrue();
4241

4342
var model = OdooModelMapper.GetDotNetModel(tableName, modelResult.Value);
4443
}
4544

46-
4745
[Fact]
4846
public async Task Can_get_all_products()
4947
{
5048
var odooClient = new OdooClient(TestConfig);
5149

52-
var products = await odooClient.GetAsync<ResCountryOdooModel>();
53-
50+
var products = await odooClient.GetAsync<ProductProductOdooModel>();
5451

5552
products.Error.Should().BeNull();
5653
products.Value.Should().NotBeNull();
@@ -261,6 +258,39 @@ public async Task Can_create_update_get_and_delete_customer()
261258
}
262259

263260

261+
[Theory]
262+
[InlineData("account.account")]
263+
[InlineData("account.account.type")]
264+
[InlineData("account.move.line")]
265+
[InlineData("account.move")]
266+
[InlineData("account.payment.term")]
267+
[InlineData("account.tax")]
268+
[InlineData("res.company")]
269+
[InlineData("coupon.program")]
270+
[InlineData("product.pricelist")]
271+
[InlineData("product.product")]
272+
[InlineData("product.template")]
273+
[InlineData("purchase.order.line")]
274+
[InlineData("purchase.order")]
275+
[InlineData("res.country")]
276+
[InlineData("res.currency")]
277+
[InlineData("res.partner.bank")]
278+
[InlineData("res.partner")]
279+
[InlineData("sale.order.line")]
280+
[InlineData("sale.order")]
281+
[InlineData("stock.picking.type")]
282+
[InlineData("stock.production.lot")]
283+
public async Task Get_DotNet_model_multiple_should_return_string(string tableName)
284+
{
285+
var odooClient = new OdooClient(TestConfig);
286+
var modelResult = await odooClient.GetModelAsync(tableName);
287+
288+
modelResult.Succeed.Should().BeTrue();
289+
290+
var model = OdooModelMapper.GetDotNetModel(tableName, modelResult.Value);
291+
}
292+
293+
264294
[Fact(Skip = "Test for working on Odoo")]
265295
// [Fact]
266296
public async Task Can_create_product()
@@ -481,7 +511,7 @@ public async Task Can_create_purchase_order()
481511
{
482512
var odooClient = new OdooClient(TestConfig);
483513

484-
var partnerResult = await odooClient.GetAsync<StockPickingTypeOdooDto>();
514+
var partnerResult = await odooClient.GetAsync<StockPickingTypeOdooModel>();
485515

486516
var purchaseOrder = OdooDictionaryModel.Create(() => new PurchaseOrderOdooModel
487517
{

PortaCapena.OdooJsonRpcClient.Example/OdooRepositoryTests.cs

Lines changed: 65 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
1-
using System.Threading.Tasks;
1+
using System;
2+
using System.Reflection;
3+
using System.Threading.Tasks;
24
using FluentAssertions;
35
using PortaCapena.OdooJsonRpcClient.Consts;
46
using PortaCapena.OdooJsonRpcClient.Models;
7+
using PortaCapena.OdooJsonRpcClient.Request;
8+
using PortaCapena.OdooJsonRpcClient.Result;
59
using PortaCapena.OdooJsonRpcClient.Shared;
610
using PortaCapena.OdooJsonRpcClient.Shared.Models;
711
using Xunit;
@@ -10,6 +14,55 @@ namespace PortaCapena.OdooJsonRpcClient.Example
1014
{
1115
public class OdooRepositoryTests : RequestTestBase
1216
{
17+
[Theory]
18+
[InlineData(typeof(ProductProductOdooModel))]
19+
[InlineData(typeof(AccountAccountOdooModel))]
20+
[InlineData(typeof(AccountAccountTypeOdooModel))]
21+
[InlineData(typeof(AccountMoveLineOdooModel))]
22+
[InlineData(typeof(AccountMoveOdooModel))]
23+
[InlineData(typeof(AccountPaymentTermOdooModel))]
24+
[InlineData(typeof(AccountTaxOdooModel))]
25+
[InlineData(typeof(CompanyOdooDto))]
26+
[InlineData(typeof(CouponProgramOdooDto))]
27+
[InlineData(typeof(ProductPriceListOdooDto))]
28+
[InlineData(typeof(ProductTemplateOdooDto))]
29+
[InlineData(typeof(PurchaseOrderLineOdooModel))]
30+
[InlineData(typeof(PurchaseOrderOdooModel))]
31+
[InlineData(typeof(ResCompanyOdooModel))]
32+
[InlineData(typeof(ResCountryOdooModel))]
33+
[InlineData(typeof(ResCurrencyOdooModel))]
34+
[InlineData(typeof(ResPartnerBankOdooModel))]
35+
[InlineData(typeof(ResPartnerOdooModel))]
36+
[InlineData(typeof(SaleOrderLineOdooDto))]
37+
[InlineData(typeof(SaleOrderOdooModel))]
38+
[InlineData(typeof(StockPickingTypeOdooModel))]
39+
[InlineData(typeof(StockProductionLotOdooDto))]
40+
public async Task Can_get_lists(Type type)
41+
{
42+
// arrange
43+
var repositoryType = typeof(OdooRepository<>).MakeGenericType(new[] { type });
44+
var queryBuilderType = typeof(OdooQueryBuilder<>).MakeGenericType(new[] { type });
45+
46+
var repository = Activator.CreateInstance(repositoryType, new object[] { TestConfig });
47+
48+
// act
49+
var query = repositoryType.GetMethod("Query").Invoke(repository, null);
50+
51+
dynamic awaitable = queryBuilderType.GetMethod("ToListAsync").Invoke(query, null);
52+
53+
await awaitable;
54+
var dynamicItems = awaitable.GetAwaiter().GetResult();
55+
56+
var resultType = typeof(OdooResult<>).MakeGenericType(new[] { type.MakeArrayType() });
57+
var items = Convert.ChangeType(dynamicItems, resultType);
58+
59+
// assert
60+
Assert.True(dynamicItems.Succeed, "result.Succeed");
61+
Assert.Null(dynamicItems.Error);
62+
Assert.NotNull(dynamicItems.Value);
63+
Assert.NotEmpty(dynamicItems.Value);
64+
}
65+
1366
[Fact]
1467
public async Task Can_get_all_products()
1568
{
@@ -22,6 +75,16 @@ public async Task Can_get_all_products()
2275
products.Succeed.Should().BeTrue();
2376
}
2477

78+
[Fact]
79+
public async Task Can_get_first_or_default_product_by_id()
80+
{
81+
var repository = new OdooRepository<ProductProductOdooModel>(TestConfig);
82+
var result = await repository.Query().ById(5).FirstOrDefaultAsync();
83+
84+
result.Succeed.Should().BeTrue();
85+
result.Error.Should().BeNull();
86+
}
87+
2588
[Fact]
2689
public async Task Can_get_product_by_id()
2790
{
@@ -205,7 +268,7 @@ public async Task Can_get_product_with_selected_language_using_repository_prop()
205268
public async Task Can_get_AccountPaymentTermOdooModel_by_id()
206269
{
207270
var repository = new OdooRepository<ResPartnerOdooModel>(TestConfig);
208-
var context = new OdooContext() {ForceCompany = 3}; // 1 My Company (San Francisco), 2 PL Company, 3 My Company (Chicago) // default My Company (San Francisco)
271+
var context = new OdooContext() { ForceCompany = 3 }; // 1 My Company (San Francisco), 2 PL Company, 3 My Company (Chicago) // default My Company (San Francisco)
209272
var products = await repository.Query().ById(14)
210273
.WithContext(context)
211274
.FirstOrDefaultAsync();

0 commit comments

Comments
 (0)