Skip to content

Commit 7499bc3

Browse files
committed
Merge pull request #55 from winappkits/UnitTests
Unit tests
2 parents 0962f65 + 3c96e56 commit 7499bc3

File tree

12 files changed

+272
-14
lines changed

12 files changed

+272
-14
lines changed

XPlatformCloudKit/XPlatformCloudKit.PCL/DataServices/LocalItemsFileService.cs

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -23,20 +23,19 @@ class LocalItemsFileService:IDataService
2323
public async Task<List<Item>> GetItems()
2424
{
2525
LocalItems = new List<Item>();
26-
if (AppSettings.EnableLocalItemsFileService == true)
27-
{
28-
string localItemsXML = await ServiceLocator.ResourceFileService.ReadFileFromInstallPath("LocalItemsFile.xml");
2926

27+
string localItemsXML = await ServiceLocator.ResourceFileService.ReadFileFromInstallPath("LocalItemsFile.xml");
3028

31-
try
32-
{
33-
await Parse(localItemsXML);
34-
}
35-
catch
36-
{
37-
ServiceLocator.MessageService.ShowErrorAsync("Error when Parsing Items from LocalItemsFile.xml", "Application Error");
38-
}
29+
30+
try
31+
{
32+
await Parse(localItemsXML);
33+
}
34+
catch
35+
{
36+
ServiceLocator.MessageService.ShowErrorAsync("Error when Parsing Items from LocalItemsFile.xml", "Application Error");
3937
}
38+
4039

4140
if (!String.IsNullOrEmpty(AppSettings.RemoteItemFileService))
4241
{
@@ -48,11 +47,11 @@ public async Task<List<Item>> GetItems()
4847
url = Misc.CacheBusterUrl(url);
4948

5049

51-
string localItemsXML = await httpClient.GetStringAsync(url);
50+
string remoteItemsXML = await httpClient.GetStringAsync(url);
5251

5352
try
5453
{
55-
await Parse(localItemsXML);
54+
await Parse(remoteItemsXML);
5655
}
5756
catch
5857
{

XPlatformCloudKit/XPlatformCloudKit.PCL/DataServices/TwitterService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public async Task<List<Item>> GetItems()
3131
await Parse(twitterSource);
3232
}
3333
}
34-
catch
34+
catch(Exception e)
3535
{
3636
ServiceLocator.MessageService.ShowErrorAsync("Error when retrieving items from TwitterService", "Application Error");
3737
}

XPlatformCloudKit/XPlatformCloudKit.PCL/Properties/AssemblyInfo.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,4 @@
2828
// [assembly: AssemblyVersion("1.0.*")]
2929
[assembly: AssemblyVersion("1.0.0.0")]
3030
[assembly: AssemblyFileVersion("1.0.0.0")]
31+
[assembly: InternalsVisibleTo ("XPlatformCloudKit.Tests")]

XPlatformCloudKit/XPlatformCloudKit.PCL/ViewModels/ItemsShowcaseViewModel.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,13 @@ public ItemsShowcaseViewModel()
3939
LoadItems(Debugger.IsAttached);
4040
}
4141

42+
public ItemsShowcaseViewModel(bool overrideCache)
43+
{
44+
// If overrideCache is true, tell LoadItems() to ignore the cache, else if false, use the
45+
// cache. This allows for direct control of cache availability during testing.
46+
LoadItems(overrideCache);
47+
}
48+
4249
#endregion // Constructors
4350

4451
#region Internal Methods
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
using System;
2+
using Microsoft.VisualStudio.TestTools.UnitTesting;
3+
using System.Threading.Tasks;
4+
5+
namespace XPlatformCloudKit.Tests
6+
{
7+
[TestClass]
8+
public class AzureMobileServiceTest
9+
{
10+
[TestMethod]
11+
public async Task ValidateAzureMobileService()
12+
{
13+
AppSettings.MobileServiceAddress = "https://xplatformcloudkit.azure-mobile.net/";
14+
AppSettings.MobileServiceApplicationKey = "UYZnUrrabofKBELSRdRsmCGboyDGMJ15";
15+
var azureMobileService = new DataServices.AzureMobileService();
16+
17+
var items = await azureMobileService.GetItems();
18+
19+
Assert.AreEqual(6, items.Count);
20+
Assert.AreEqual("Captain America", items[0].Title);
21+
}
22+
}
23+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
using System;
2+
using System.Text;
3+
using System.Collections.Generic;
4+
using Microsoft.VisualStudio.TestTools.UnitTesting;
5+
using System.Threading.Tasks;
6+
using XPlatformCloudKit.DataServices;
7+
using XPlatformCloudKit.Services;
8+
using XPlatformCloudKit.Tests.Services;
9+
10+
namespace XPlatformCloudKit.Tests
11+
{
12+
/// <summary>
13+
/// Summary description for LocalItemsFileServiceTest
14+
/// </summary>
15+
[TestClass]
16+
public class LocalItemsFileServiceTest
17+
{
18+
[ClassInitialize]
19+
public static void ClassInitialize(TestContext t)
20+
{
21+
ServiceLocator.ResourceFileService = new TestResourceFileService();
22+
}
23+
24+
[TestMethod]
25+
public async Task ValidateLocalItemsFileService()
26+
{
27+
var localItemsFileService = new LocalItemsFileService();
28+
29+
var items = await localItemsFileService.GetItems();
30+
31+
Assert.AreEqual(3, items.Count);
32+
Assert.AreEqual("Warning", items[0].Subtitle);
33+
}
34+
}
35+
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
using System;
2+
using Microsoft.VisualStudio.TestTools.UnitTesting;
3+
using XPlatformCloudKit.Services;
4+
using Cirrious.CrossCore;
5+
using XPlatformCloudKit.ViewModels;
6+
using XPlatformCloudKit.Tests.Services;
7+
using XPlatformCloudKit.DataServices;
8+
using Cirrious.CrossCore.IoC;
9+
using Cirrious.MvvmCross.Plugins.File;
10+
using Cirrious.MvvmCross.Plugins.File.Wpf;
11+
using System.Diagnostics;
12+
using System.Threading;
13+
14+
namespace XPlatformCloudKit.Tests
15+
{
16+
[TestClass]
17+
public class RemoteAppSettingsTest
18+
{
19+
public static int loadingOfDataSourcesTimeOutInMilliseconds = 30000;
20+
public static AutoResetEvent waitHandle = new AutoResetEvent(false);
21+
public static ItemsShowcaseViewModel.LoadCompletedEventHandler eventHandler = delegate (object sender, EventArgs e)
22+
{
23+
waitHandle.Set(); // signal that the finished event was raised
24+
};
25+
26+
[ClassInitialize]
27+
public static void ClassInitialize(TestContext t)
28+
{
29+
ServiceLocator.AzureMobileService = new AzureMobileService();
30+
ServiceLocator.ResourceFileService = new TestResourceFileService();
31+
ServiceLocator.MessageService = new TestMessageService();
32+
33+
var iocProvider = MvxSimpleIoCContainer.Initialize();
34+
Mvx.RegisterSingleton<IMvxFileStore>(new MvxWpfFileStore());
35+
}
36+
37+
[TestMethod]
38+
public void ValidateRemoteAppSettingsService()
39+
{
40+
Debug.WriteLine("Initial App Name = " + AppSettings.ApplicationName);
41+
Assert.IsFalse(AppSettings.ApplicationName.Contains("Remote Application"), "Application currently uses an inconclusive name of " + AppSettings.ApplicationName);
42+
43+
AppSettings.EnableRemoteAppSettings = true;
44+
AppSettings.RemoteAppSettingsService = "http://pjdecarlo.com/playground/XPCKSampleRemoteAppSettings/AppSettings.html";
45+
46+
var itemsShowcaseViewModel = new ItemsShowcaseViewModel(true); // Ignore cache to retrieve AppSettings file from remote source
47+
MonitorLoadingItems(itemsShowcaseViewModel);
48+
Debug.WriteLine("Initial DataSources Loaded " + DateTime.Now.ToString());
49+
50+
Debug.WriteLine("Final App Name = " + AppSettings.ApplicationName);
51+
Assert.IsTrue(AppSettings.ApplicationName.Contains("Remote Application"),
52+
"Expected Remote Application Identifier not found."); // Will fail if invalid or no AppSettings file was retrieved
53+
}
54+
55+
public static void MonitorLoadingItems(ItemsShowcaseViewModel itemsShowcaseViewModel)
56+
{
57+
itemsShowcaseViewModel.LoadCompleted += eventHandler;
58+
59+
if (!waitHandle.WaitOne(loadingOfDataSourcesTimeOutInMilliseconds, false))
60+
{
61+
Assert.Fail("Loading of DataSources timed out after " + loadingOfDataSourcesTimeOutInMilliseconds + " ms");
62+
}
63+
64+
itemsShowcaseViewModel.LoadCompleted -= eventHandler;
65+
}
66+
}
67+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
using System;
2+
using Microsoft.VisualStudio.TestTools.UnitTesting;
3+
using XPlatformCloudKit.Models;
4+
using XPlatformCloudKit.DataServices;
5+
using System.Threading.Tasks;
6+
7+
namespace XPlatformCloudKit.Tests
8+
{
9+
[TestClass]
10+
public class RssServiceTest
11+
{
12+
[TestMethod]
13+
public async Task ValidateRssService()
14+
{
15+
//If value == -1, ensures all items are fetched
16+
AppSettings.RssMaxItemsPerFeed = -1;
17+
AppSettings.RssAddressCollection =
18+
new UrlSource[] {
19+
new UrlSource() { Url = "http://reddit.com/.rss", Group = "Reddit" },
20+
new UrlSource() { Url = "http://reddit.com/r/technology/.rss", Group = "Reddit Technology" },
21+
new UrlSource() { Url = "http://www.bing.com/search?q=tesla&format=rss", Group = "Bing example"}
22+
};
23+
var rssService = new RssService();
24+
25+
var items = await rssService.GetItems();
26+
27+
Assert.IsTrue(items.Count > 0, "Error: Zero items retrieved from RSS Service");
28+
}
29+
}
30+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
using System;
2+
using Microsoft.VisualStudio.TestTools.UnitTesting;
3+
using System.Threading.Tasks;
4+
using XPlatformCloudKit.Models;
5+
using XPlatformCloudKit.DataServices;
6+
using XPlatformCloudKit.Services;
7+
using XPlatformCloudKit.Tests.Services;
8+
using AsyncOAuth;
9+
using System.Security.Cryptography;
10+
11+
namespace XPlatformCloudKit.Tests
12+
{
13+
[TestClass]
14+
public class TwitterServiceTest
15+
{
16+
17+
[ClassInitialize]
18+
public static void ClassInitialize(TestContext t)
19+
{
20+
//Oauth Init
21+
OAuthUtility.ComputeHash = (key, buffer) => { using (var hmac = new HMACSHA1(key)) { return hmac.ComputeHash(buffer); } };
22+
}
23+
24+
[TestMethod]
25+
public async Task ValidateTwitterService()
26+
{
27+
ServiceLocator.MessageService = new TestMessageService();
28+
//Created @ https://apps.twitter.com, found under "manage api keys"
29+
AppSettings.TwitterConsumerKey = "F4OL4vtT0PidHiWuBaWePDEj8";
30+
AppSettings.TwitterConsumerSecret = "GC7hETzCvSsGkCPgqN1fEVCBUsszk9wgZ5wt8kn8Dg2TWw05bE";
31+
//In "manage api keys" scroll down to create access tokens
32+
AppSettings.TwitterAccessToken = "1395095078-OJQnXgyLvLAPOYwTP4r13yDMRK2lcWDZXouCZBd";
33+
AppSettings.TwitterAccessSecret = "7Hb4bChKQNOXhYwKJtQq3X8Vt9NZeRbZAKr1R9UFwcpjx";
34+
AppSettings.TwitterAddressCollection = new UrlSource[]
35+
{
36+
new UrlSource {Url = "https://api.twitter.com/1.1/statuses/user_timeline.json?user_id=pjdecarlo", Group = "PJDeCarlo"}
37+
};
38+
var twitterService = new TwitterService();
39+
40+
var items = await twitterService.GetItems();
41+
42+
Assert.IsTrue(items.Count > 0, "Error: Zero items retrieved from Twitter Service");
43+
}
44+
}
45+
}

XPlatformCloudKit/XPlatformCloudKit.Tests/XPlatformCloudKit.Tests.csproj

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@
3535
<WarningLevel>4</WarningLevel>
3636
</PropertyGroup>
3737
<ItemGroup>
38+
<Reference Include="AsyncOAuth, Version=0.8.4.0, Culture=neutral, processorArchitecture=MSIL">
39+
<SpecificVersion>False</SpecificVersion>
40+
<HintPath>..\packages\AsyncOAuth.0.8.4\lib\AsyncOAuth.dll</HintPath>
41+
</Reference>
3842
<Reference Include="Cirrious.CrossCore, Version=1.0.0.0, Culture=neutral, PublicKeyToken=e16445fd9b451819, processorArchitecture=MSIL">
3943
<SpecificVersion>False</SpecificVersion>
4044
<HintPath>..\packages\MvvmCross.HotTuna.CrossCore.3.1.1\lib\net45\Cirrious.CrossCore.dll</HintPath>
@@ -59,6 +63,12 @@
5963
<SpecificVersion>False</SpecificVersion>
6064
<HintPath>..\packages\MvvmCross.HotTuna.Plugin.Json.3.1.1\lib\net45\Cirrious.MvvmCross.Plugins.Json.dll</HintPath>
6165
</Reference>
66+
<Reference Include="Microsoft.Threading.Tasks">
67+
<HintPath>..\packages\Microsoft.Bcl.Async.1.0.165\lib\net45\Microsoft.Threading.Tasks.dll</HintPath>
68+
</Reference>
69+
<Reference Include="Microsoft.Threading.Tasks.Extensions">
70+
<HintPath>..\packages\Microsoft.Bcl.Async.1.0.165\lib\net45\Microsoft.Threading.Tasks.Extensions.dll</HintPath>
71+
</Reference>
6272
<Reference Include="Microsoft.WindowsAzure.Mobile, Version=1.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
6373
<SpecificVersion>False</SpecificVersion>
6474
<HintPath>..\packages\WindowsAzure.MobileServices.1.2.3\lib\net45\Microsoft.WindowsAzure.Mobile.dll</HintPath>
@@ -71,6 +81,7 @@
7181
<HintPath>..\packages\Newtonsoft.Json.6.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
7282
</Reference>
7383
<Reference Include="System" />
84+
<Reference Include="System.Net" />
7485
<Reference Include="System.Net.Http" />
7586
<Reference Include="System.Net.Http.Extensions">
7687
<HintPath>..\packages\Microsoft.Net.Http.2.2.19\lib\net45\System.Net.Http.Extensions.dll</HintPath>
@@ -80,6 +91,7 @@
8091
<HintPath>..\packages\Microsoft.Net.Http.2.2.19\lib\net45\System.Net.Http.Primitives.dll</HintPath>
8192
</Reference>
8293
<Reference Include="System.Net.Http.WebRequest" />
94+
<Reference Include="System.Security" />
8395
</ItemGroup>
8496
<Choose>
8597
<When Condition="('$(VisualStudioVersion)' == '10.0' or '$(VisualStudioVersion)' == '') and '$(TargetFrameworkVersion)' == 'v3.5'">
@@ -100,9 +112,15 @@
100112
<Compile Include="Bootstrap\FilePluginBootstrap.cs" />
101113
<Compile Include="Bootstrap\JsonPluginBootstrap.cs" />
102114
<Compile Include="ItemsShowcaseViewModelTests.cs" />
115+
<Compile Include="LocalItemsFileServiceTest.cs" />
103116
<Compile Include="Properties\AssemblyInfo.cs" />
104117
<Compile Include="Services\TestMessageService.cs" />
105118
<Compile Include="Services\TestResourceFileService.cs" />
119+
<Compile Include="AzureMobileServiceTest.cs" />
120+
<Compile Include="RssServiceTest.cs" />
121+
<Compile Include="TwitterServiceTest.cs" />
122+
<Compile Include="RemoteAppSettingsTest.cs" />
123+
<Compile Include="YoutubeServiceTest.cs" />
106124
</ItemGroup>
107125
<ItemGroup>
108126
<ProjectReference Include="..\XPlatformCloudKit.PCL\XPlatformCloudKit.PCL.csproj">

0 commit comments

Comments
 (0)